我有一些按钮,如果我按下按钮-然后屏幕改变,在新的屏幕上有一个标签,显示的文本是在已按下的按钮。在
当一切看起来都好的时候它就不起作用了。在
Python
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.lang import Builder
from kivy.uix.button import Button
class ScreenOne(Screen):
pass
class ScreenTwo(Screen):
def on_pre_enter(self, *args):
btn = Button(text = "word is here", on_release =self.pressedFunction)
self.ids.container.add_widget(btn)
btn1 = Button(text = "another word is here", on_release =self.pressedFunction)
self.ids.container.add_widget(btn1)
def pressedFunction(self, instance, *args):
self.manager.current= "three"
screenThree = ScreenThree()
text = str(instance.text)
screenThree.changing_label(text)
class ScreenThree(Screen):
def changing_label(self, text):
self.ids.my_label.text = text
class ScreenManagement(ScreenManager):
pass
presentation = Builder.load_file("example.kv")
class MainApp(App):
def build(self):
return presentation
if __name__ == "__main__":
MainApp().run()
基维
^{pr2}$输出
File "example.py", line 28, in changing_label
self.ids.my_label.text = text
File "kivy\properties.pyx", line 841, in kivy.properties.ObservableDict.__getattr__
AttributeError: 'super' object has no attribute '__getattr__'
问题
1。AttributeError-我的标签
在kv文件中,缺少
id: my_label
。在2。填充我的屏幕之前_标签.text在
填充
my_label.text
是在切换屏幕后完成的,self.manager.current = "three"
。在3。屏幕三-空白/黑色窗口
屏幕三实例化两次。第一个实例由
ScreenThree:
在kv文件中创建(这相当于Python代码中的ScreenThree()
)。第二个实例是用Python代码screenThree = ScreenThree()
创建的。在my_label.text
的填充在第二个实例/对象中,而不是在第一个实例中。因此,screentree是空白/黑色窗口,因为app使用的是kv文件的视图,即screentree的第一个实例。在注:
如果添加
id()
函数,它将为屏幕显示不同的内存位置。在解决方案
kv文件
ScreenTwo:
下添加id: screen_two
。这将用于引用屏幕2中的类属性/方法。在app.root.current = "two"
替换为root.manager.current = "two"
,因为默认情况下每个屏幕都有一个属性manager
id: my_label
Python代码
from kivy.properties import StringProperty
text = StringProperty('')
,这样就不需要传递参数,也不需要封装。在text = str(instance.text)
替换为self.text = str(instance.text)
changing_label()
方法重命名为on_pre_enter()
方法,并从参数列表中删除{self.ids.my_label.text = text' with
self.ids.my_标签。文本=self.manager.ids.屏幕_二、文本`在return presentation
替换为return Builder.load_file("example.kv")
,并删除{示例
在主.py在
^{pr2}$在示例.kv在
输出
“我的标签”在你的.kv文件中不存在,请在标签上添加一个id,你可以在标签上进行这些更改。在
相关问题 更多 >
编程相关推荐