我正在使用kivy和ScreenManager来制作GUI并使用许多屏幕。
我有一个Screen1类,其中有一个名为的变量num
,其值为1。
Screen1 GUI有一个按钮,当我按下按钮时,它会调用一个def,它将变量calledwithbutton
更改num
为self.num = 2
,然后将屏幕更改为Screen 2。
Screen2类的变量var
值为Screen1().num
。
Screen2 GUI有一个标签,文字是 str(var)
预期的结果是Screen2 GUI标签文本= '2'
但是真正的结果是,Screen 2 GUI标签文本= '1'
如何'2'
基于num
变量将Screen 2 GUI标签文本更改为?
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
class Manager(ScreenManager):
pass
class Screen1(Screen):
num = 1
def calledwithbutton(self):
self.num = 2
self.parent.current = 'Screen 2'
class Screen2(Screen):
var = Screen1.num
class RootApp(App):
def build(self):
return Manager()
RootApp().run()
<Manager>:
Screen1:
name: 'Screen 1'
Screen2:
name: 'Screen 2'
<Screen1>:
Button:
text: 'This is a button'
on_press: root.calledwithbutton()
<Screen2>:
Label:
text: str(root.var)
对于这类任务,您不必使用静态变量,因为该变量不会通知更改,在您的情况下,var在创建Screen2对象时仅采用num的值1,因此它永远不会更改为2。
在千篇一律的情况下,针对这些情况的解决方案是使用属性(在本例中为NumericProperty),然后在属性之间进行绑定。
* .py
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import NumericProperty
class Manager(ScreenManager):
pass
class Screen1(Screen):
num = NumericProperty(1)
def calledwithbutton(self):
self.num = 2
self.manager.current = 'Screen 2'
class Screen2(Screen):
var = NumericProperty(0)
class RootApp(App):
def build(self):
return Manager()
if __name__ == '__main__':
RootApp().run()
* .kv
<Manager>:
Screen1:
id: screen1
name: 'Screen 1'
Screen2:
id: screen2
name: 'Screen 2'
var: screen1.num # binding
<Screen1>:
Button:
text: 'This is a button'
on_press: root.calledwithbutton()
<Screen2>:
Label:
text: str(root.var)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句