Python 为什么';kivy应用程序中不会出现下一个屏幕吗?
我期待下面的kivy应用程序在我按下然后松开按钮时切换屏幕,但什么都没有发生,终端上也没有错误。当我运行应用程序时,GirisEkrani屏幕会出现,然后当我按下并释放GirisEkrani中的按钮时,下一个屏幕(GirisEkrani2)会出现。你知道怎么做吗Python 为什么';kivy应用程序中不会出现下一个屏幕吗?,python,kivy,screen,Python,Kivy,Screen,我期待下面的kivy应用程序在我按下然后松开按钮时切换屏幕,但什么都没有发生,终端上也没有错误。当我运行应用程序时,GirisEkrani屏幕会出现,然后当我按下并释放GirisEkrani中的按钮时,下一个屏幕(GirisEkrani2)会出现。你知道怎么做吗 from kivy.app import App from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen Build
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_string("""
<ekranApp>
GirisEkrani:
id: ge
Button:
text: "İleri"
on_release: ge.manager.current = ge.manager.next()
GirisEkrani2:
Button:
id: ge2
text: "Ileri 2"
on_release: ge2.manager.current = ge2.manager.next()
KontrolEkrani:
id: ke
Button:
text: "Geri"
on_release: ke.manager.current = ke.manager.previous()
""")
class GirisEkrani(Screen):
pass
class GirisEkrani2(Screen):
pass
class KontrolEkrani(Screen):
pass
class ekranApp(App, ScreenManager):
def build(self):
#root = ScreenManager()
#root.add_widget(GirisEkrani(name = "giris_ekrani"))
#root.add_widget(GirisEkrani2(name = "giris_ekrani2"))
#root.add_widget(KontrolEkrani(name = "kontrol_ekrani"))
return self
if __name__ == "__main__":
ekranApp().run()
从kivy.app导入应用
从kivy.lang导入生成器
从kivy.uix.screenmanager导入screenmanager,屏幕
生成器。加载\u字符串(“”)
GirisEkrani:
id:ge
按钮:
文本:“İleri”
发布时:ge.manager.current=ge.manager.next()
GirisEkrani2:
按钮:
id:ge2
文本:“Ileri 2”
发布时:ge2.manager.current=ge2.manager.next()
康特罗莱克拉尼:
id:ke
按钮:
文本:“Geri”
发布时:ke.manager.current=ke.manager.previous()
""")
GirisEkrani类(屏幕):
通过
GirisEkrani2级(屏幕):
通过
KontrolEkrani类(屏幕):
通过
类ekranApp(应用程序、屏幕管理器):
def生成(自):
#root=ScreenManager()
#root.add_小部件(GirisEkrani(name=“giris_ekrani”))
#root.add_小部件(GirisEkrani2(name=“giris_ekrani2”))
#root.add_小部件(KontrolEkrani(name=“kontrol_ekrani”))
回归自我
如果名称=“\uuuuu main\uuuuuuuu”:
ekranApp().run()
虽然人们似乎提倡使用.kv文件而不是使用纯Python,但我发现当某些东西不起作用时没有出现错误是非常令人沮丧的。thebuild()应用程序
的
方法应返回一个小部件
,它将是你的应用程序
的小部件
树的根,但你的方法返回的是应用程序
本身。我怀疑那会引起问题。但是,您的代码不起作用,因为您没有设置屏幕的名称。以下是您的kv
的更正版本:
Builder.load_string("""
<ekranApp>:
GirisEkrani:
id: ge
name: "giris_ekrani"
Button:
text: "İleri"
on_release: ge.manager.current = ge.manager.next()
GirisEkrani2:
id: ge2
name: "giris_ekrani2"
Button:
text: "Ileri 2"
on_release: ge2.manager.current = ge2.manager.next()
KontrolEkrani:
id: ke
name: "kontrol_ekrani"
Button:
text: "Geri"
on_release: ke.manager.current = ke.manager.previous()
""")
Builder.load\u字符串(“”)
:
GirisEkrani:
id:ge
姓名:“giris_ekrani”
按钮:
文本:“İleri”
发布时:ge.manager.current=ge.manager.next()
GirisEkrani2:
id:ge2
姓名:“giris_ekrani2”
按钮:
文本:“Ileri 2”
发布时:ge2.manager.current=ge2.manager.next()
康特罗莱克拉尼:
id:ke
名称:“kontrol_ekrani”
按钮:
文本:“Geri”
发布时:ke.manager.current=ke.manager.previous()
""")
另外,您的GirisEkrani2
的id
实际上是在运行的按钮上设置的,但是您能解释一下添加名称如何解决问题吗?我甚至看不到代码中的任何地方使用了这些名称。我只能回显:当您创建屏幕时,您绝对需要为它指定一个名称
(以粗体显示)。