这是我的代码的一部分-python文件使用文本创建按钮。然后,当按下其中一个按钮时-屏幕将更改,新屏幕上的标签必须与按下的按钮的文本相同。但是,即使其他所有内容都可以正常工作,标签的文本也不会更改,并且不会出现任何错误。
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()
KIVY:
ScreenManagement:
ScreenOne:
ScreenTwo:
ScreenThree:
<ScreenOne>:
BoxLayout:
Button:
text: "press me"
on_release: app.root.current = "two"
<ScreenTwo>:
name: "two"
BoxLayout:
id: container
<ScreenThree>:
name: "three"
BoxLayout:
id: labelContainer
Label:
text: ""
id: my_label
答案 0 :(得分:0)
由于您没有提供任何类型的错误,所以我会猜测可能是错误的。 首先:
if spawned_List[0] == "False":
spawned_List没有在您的代码中定义,并且我不确定为什么要将该对象与字符串“ False”进行比较。
for x in range(0,len(languages)):
我建议您改为这样做:
for word in languages:
btn = Button(
text=str(word), size_hint=(None, None), size=(140,70),
font_size=18, bold=True, color=[0,1,1,1],
background_color=(.156, .172, .24, 0.7),
on_release=self.changing_screen
)
我可以做出的另一种猜测:
screenSlider = SliderScreen()
如果您已经拥有它的实例没有任何意义,则应该使用主实例。
如果您可以向我们提供更多信息,我们也许可以轻松回答您的问题。
----------- EDIT ----------------
screenThree = ScreenThree()
您正在创建ScreenThree的新实例,而该实例不是您希望使用的那个,因此您有同一类的两个不同实例,这就是为什么它不起作用的原因。相反,您应该使用ScreenManager或实例化该实例的任何实例并调用所需的方法。