Python kivy两个网格布局和屏幕菜单
我在kivy中有两个应用程序。 两者都基于网格布局 我发现了类似的问题,但我不明白: 在.py中:Python kivy两个网格布局和屏幕菜单,python,python-2.7,kivy,Python,Python 2.7,Kivy,我在kivy中有两个应用程序。 两者都基于网格布局 我发现了类似的问题,但我不明白: 在.py中: import kivy kivy.require("1.9.0") from kivy.uix.label import Label from kivy.properties import ObjectProperty from kivy.app import App from kivy.uix.gridlayout import GridLayout class FirstScreen(Gri
import kivy
kivy.require("1.9.0")
from kivy.uix.label import Label
from kivy.properties import ObjectProperty
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
class FirstScreen(GridLayout):
#some methods
class SecondScreen(GridLayout):
#some methods
在.kv中
<FirstScreen>:
id: sterowanie_serv
display: entry
rows: 10
padding: 10
spacing: 10
BoxLayout:
spacing: 20
CustButton:
text:'1'
on_press: do method from second screen class
CustButton:
text:'x'
on_press: do method from second screen class
CustButton:
text:'go to Second screen'
on_press: root.manager.current = 'SecondScreen'
<SecondScreen>:
id: Przemo
display: entry
rows: 5
padding: 10
spacing: 10
BoxLayout:
spacing: 20
CustButton:
text:'1'
on_press: do method from second screen class
CustButton:
text:'x2'
on_press: do method from second screen class
CustButton:
text:'go to First screen'
on_press: root.manager.current = 'SecondScreen'
ScreenManager
只接受Screen
小部件FirstScreen
和SecondScreen
必须是Screen
实例,它们不能是GridLayouts
。您应该在FirstScreen
和SecondScreen
中创建网格布局
另一方面,ScreenManager.current
属性是当前显示屏幕的名称。您需要在窗口中设置name属性
基于您的代码的示例:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
kv_text = """\
#:import WipeTransition kivy.uix.screenmanager.WipeTransition
<MainScreen>:
transition: WipeTransition()
id: sm
FirstScreen:
SecondScreen:
<FirstScreen>:
name: "first_screen"
GridLayout:
id: sterowanie_serv
rows: 10
padding: 10
spacing: 10
BoxLayout:
spacing: 20
Button:
text:'1'
on_press: print(app.root)
Button:
text:'x'
on_press: print('Button X')
Button:
text:'go to Second screen'
on_press: app.root.current = 'second_screen'
<SecondScreen>:
name: "second_screen"
GridLayout:
id: Przemo
rows: 5
padding: 10
spacing: 10
BoxLayout:
spacing: 20
Button:
text:'1'
on_press: print('Button 1')
Button:
text:'x2'
on_press: print('Button X2')
Button:
text:'go to First screen'
on_press: app.root.current = 'first_screen'
"""
class MainScreen(ScreenManager):
def __init__(self):
super(MainScreen, self).__init__()
class FirstScreen(Screen):
#some methods
pass
class SecondScreen(Screen):
#some methods
pass
class MyKivyApp(App):
def build(self):
return MainScreen()
def main():
Builder.load_string(kv_text)
app = MyKivyApp()
app.run()
if __name__ == '__main__':
main()
从kivy.app导入应用
从kivy.lang导入生成器
从kivy.uix.screenmanager导入screenmanager,屏幕
kv_text=“”\
#:导入WipeTransition kivy.uix.screenmanager.WipeTransition
:
transition:WipeTransition()
id:sm
第一屏:
第二屏:
:
名称:“第一屏”
网格布局:
id:sterowanie_serv
行:10
填充:10
间距:10
盒子布局:
间距:20
按钮:
正文:“1”
按:打印(app.root)
按钮:
文本:'x'
按:打印('X'按钮)
按钮:
文本:“转到第二个屏幕”
按:app.root.current='second\u screen'
:
名称:“第二屏幕”
网格布局:
id:Przemo
行数:5
填充:10
间距:10
盒子布局:
间距:20
按钮:
正文:“1”
按:打印('按钮1')
按钮:
文本:'x2'
按:打印('X2'按钮)
按钮:
文本:“转到第一个屏幕”
按:app.root.current='first\u screen'
"""
类主屏幕(屏幕管理器):
定义初始化(自):
超级(主屏幕,自我)。\uuuu初始化
类第一屏幕(屏幕):
#一些方法
通过
第二类屏幕(屏幕):
#一些方法
通过
MyKivyApp类(应用程序):
def生成(自):
返回主屏幕()
def main():
生成器.加载字符串(kv\U文本)
app=MyKivyApp()
app.run()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
运行示例:
在按钮/滑块中如何引用方法?我的所有类都在control\u serv.py文件中。在kv中,我有一个In滑块值:control_serv.get_val_3(),但我看到AttributeError:“GridLayout”对象没有属性“get_val_3”
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
kv_text = """\
#:import WipeTransition kivy.uix.screenmanager.WipeTransition
<MainScreen>:
transition: WipeTransition()
id: sm
FirstScreen:
SecondScreen:
<FirstScreen>:
name: "first_screen"
GridLayout:
id: sterowanie_serv
rows: 10
padding: 10
spacing: 10
BoxLayout:
spacing: 20
Button:
text:'1'
on_press: print(app.root)
Button:
text:'x'
on_press: print('Button X')
Button:
text:'go to Second screen'
on_press: app.root.current = 'second_screen'
<SecondScreen>:
name: "second_screen"
GridLayout:
id: Przemo
rows: 5
padding: 10
spacing: 10
BoxLayout:
spacing: 20
Button:
text:'1'
on_press: print('Button 1')
Button:
text:'x2'
on_press: print('Button X2')
Button:
text:'go to First screen'
on_press: app.root.current = 'first_screen'
"""
class MainScreen(ScreenManager):
def __init__(self):
super(MainScreen, self).__init__()
class FirstScreen(Screen):
#some methods
pass
class SecondScreen(Screen):
#some methods
pass
class MyKivyApp(App):
def build(self):
return MainScreen()
def main():
Builder.load_string(kv_text)
app = MyKivyApp()
app.run()
if __name__ == '__main__':
main()