我有两个不同的.kv
文件:
PriceTrackerUI.kv
PopupWindow.kv
我想“刷新”弹出窗口的内容,每次我关闭它
在PopupWindow.kv
中,程序通过加载已存在于目录中的文件来打开一个映像。每次运行应用程序的后期都会覆盖此文件。问题是,.kv
文件完全是在程序初始化时加载的,以后不会再加载。由于它在主UI窗口中是有意义的,而在弹出窗口中则没有,弹出窗口的内容会随着主UI窗口中按钮的每次单击而改变
下面是一个最小的代码
PopupWindow.kv
:
<PopupWindow>
orientation: 'vertical'
size_hint: 1, .9
BoxLayout:
orientation: 'horizontal'
cols: 2
AsyncImage:
source: root.daily # loading image stored under that variable
allow_stretch: True
size_hint: .9, 1
pos_hint: {'x': 0, 'center_y': .5}
(...)
PriceTrackerUI
:
<SearchPerformer>
GridLayout:
size: root.size
cols: 2
rows: 3
(...)
FloatLayout:
Button:
text: 'Search'
size_hint: .5, .4
pos_hint: {"x": .75, "top": .9}
border: 20, 20, 20, 20
on_press: root.input_grabber(root.dt)
on_release: root.clear()
on_release: root.hit_enter()
main.py
:
import UI
UI.PriceTrackerUIApp().run()
UI.py
:
import kivy
import database
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.properties import StringProperty
from kivy.lang import Builder
kivy.require('1.11.1')
user_input = []
Builder.load_file('PopupWindow.kv')
class PopupWindow(BoxLayout):
daily = StringProperty('./daily.png')
def popup_show():
pop = PopupWindow()
pop_win = Popup(title="Analysis", content=pop, size_hint=(.9, .9))
pop_win.open()
class SearchPerformer(BoxLayout):
dt = database
def hit_enter(self):
popup_show()
def input_grabber(self, database):
specs = [self.ids.crmk.text, self.ids.crmd.text, self.ids.cryr.text, self.ids.crft.text]
(...)
user_input.extend(specs)
database.add_to_database()
database.query_database()
database.run_plot() # daily.png image gets updated after running that method
class PriceTrackerUIApp(App):
def build(self):
return SearchPerformer()
您可以使用
Builder.load_file
或Builder.load_string
在任意点加载kv文件。当您实例化一个小部件时,将应用任何以前加载的规则如果在更改
daily.png
文件后试图打开新的Popup
,则当前代码应在新的Popup
文件中反映更改的daily.png
。重新加载kv
不会影响这一点如果试图更新已打开的
Popup
中的AsyncImage
,则重新加载kv
将无效。在这种情况下,您只需要调用AsnycImage
的reload()
方法。当然,这意味着您必须保留对PopupWindow
的引用,并可能向AsyncImage
添加一个id
。因此,要添加一个id
,稍微修改一下kv
:并在代码中使用它(以及一些小的修改):
相关问题 更多 >
编程相关推荐