如何解决Kivy ScreenManager:尝试添加第二个窗口后,应用程序停止运行
我正在为自己的论文构建一个应用程序,到目前为止,它仅使用一个窗口就可以很好地运行。现在我正在尝试添加其他窗口,例如说明。我一直在关注Screen Manager的文档和一些应用示例,并尝试添加第二个窗口。但是以某种方式无法识别我的kv.file中的ScreenManager类。也许你可以帮忙,我不确定我缺少什么。
主要py: Peenomat.py
import kivy
# -*- coding: iso-8859-1 -*-
from kivy.app import App
from kivy.uix.button import Label
from kivy.uix.widget import Widget
from kivy.uix.textinput import TextInput
from kivy.lang import Builder
from kivy.uix.anchorlayout import AnchorLayout
from kivy.core.text import LabelBase
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import BooleanProperty
from kivy.properties import ObjectProperty
#additional .kv files used to speciffy layout and functions of peenomat.kv
Builder.load_file('Header.kv')
Builder.load_file('Statusbar.kv')
Builder.load_file('Inputparameters.kv')
Builder.load_file('Outputparameters.kv')
pm = Builder.load_file('peenomat.kv')
#Layout
"""
class Peenomat(AnchorLayout):
pass
"""
class Peenomat(Screen):
pass
class Instruction(Screen):
pass
class WindowManager(ScreenManager):
pass
#App
class PeenomatApp(App):
def build(self):
return pm
if __name__=="__main__":
PeenomatApp().run()
和最小化的.kv文件 peenomat.kv :
WindowManager:
Peenomat:
Instruction:
<Peenomat>
name: "peenomat"
AnchorLayout:
anchor_x: 'left'
anchor_y: 'bottom'
GridLayout:
cols: 1
Header:
id:
size_hint:
InputParameters:
id:
size_hint:
StatusBar:
id:
size_hint:
OutputParameters:
id:_
size_hint:
<Instruction>:
name: "instruction"
Button:
text: "Verstanden!"
on_release:
app.root.current = "main"
root.manager.transition.direction = "right"
因此,就像我说的那样,应用程序在添加Screen和ScreenManager类之前可以工作,并且出现错误:
Traceback (most recent call last):
File "C:/Users/schum/Dokumente/TUD/Masterthesis/Peenomat.py",line 21,in <module>
pm = Builder.load_file('peenomat.kv')
File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\lang\builder.py",line 301,in load_file
return self.load_string(data,**kwargs)
File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\lang\builder.py",line 399,in load_string
widget = Factory.get(parser.root.name)(__no_builder=True)
File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\factory.py",line 131,in __getattr__
raise FactoryException('Unknown class <%s>' % name)
kivy.factory.FactoryException: Unknown class <WindowManager>
尽管他们有相同的名字。希望你能帮助我!
解决方法
因此,我通过在py文件中使用ScreenManager的实现找到了解决方案。我通过 class WindowManager(ScreenManager)
类进行了切换:
sm = ScreenManager()
sm.add_widget(Peenomat(name='peenomat'))
sm.add_widget(Instruction(name='instruction'))
并因此添加到我的构建器中:
class PeenomatApp(App):
def build(self):
return sm
我从kv.file中完全删除了带有WindowManager类的3行。现在可以正常使用了
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。