Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python kivy两个网格布局和屏幕菜单_Python_Python 2.7_Kivy - Fatal编程技术网

Python kivy两个网格布局和屏幕菜单

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

我在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(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()