简体   繁体   English

python screenmanager (kivy)

[英]python screenmanager (kivy)

`from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager, Screen

class Login(Screen):
    def main(self):
        layout = GridLayout()
        def btn():
            sm.switch_to(Screen(name='account'))
        self.bt = Button(text='tela 1',
                         size_hint=(None,None),
                         size=(592,86),
                         pos=(50,50), on_press=btn,
                         background_color=(1,0,0,0))
        layout.add_widget(self.bt)
        return layout
    
class Account(Screen):
    def main2(self):
        lt = GridLayout()
        def btnn():
            sm.switch_to(Screen(name='login'))
        self.btt = Button(text='telaa 2',
                         size_hint=(None,None),
                         size=(592,86),
                         pos=(50, 50), on_press=btnn,
                         background_color=(1,0,0,0))
        lt.add_widget(self.btt)
        return lt

sm = ScreenManager()
sm.add_widget(Login(name='login'))
sm.add_widget(Account(name='account'))

class TestApp(App):

    def build(self):
        return sm

if _name_ == '_main_':
    TestApp().run()

`I started with kivy today, but as it is only a passing novel, I do not intend to learn kivy language. `我今天入手了kivy,不过只是个路过的小说,没打算学kivy语言。

All the tutorials I see on the inte.net about screen manager use kivy language.我在网上看到的所有关于屏幕管理器的教程都使用kivy语言。 How do I scroll through 2 screens using only python?如何仅使用 python 滚动浏览 2 个屏幕? I tried to translate from kivy language to python but all I got was a black screen.我试图将 kivy 语言翻译成 python,但我得到的只是黑屏。

This is minimal example which uses Python code (not kv language) to create Screen with Button which changes screen in screen manager.这是使用 Python 代码(不是 kv 语言)创建带有ButtonScreen的最小示例,该按钮在屏幕管理器中更改屏幕。

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout

# Declare both screens

class MenuScreen(Screen):
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.layout = BoxLayout()
        self.add_widget(self.layout)

        self.label = Label(text='Menu Screen')        
        self.layout.add_widget(self.label)

        self.button = Button(text='Go To Settings')
        self.button.bind(on_press=self.change_screen)
        self.layout.add_widget(self.button)
        
    def change_screen(self, event):
        #sm.current = 'settings'
        self.manager.transition.direction = 'up'
        self.manager.transition.duration = 3 # 3 seconds
        self.manager.current = 'settings'
        
class SettingsScreen(Screen):
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.layout = FloatLayout()
        self.add_widget(self.layout)

        self.label = Label(text='Settings Screen')        
        self.layout.add_widget(self.label)

        self.button = Button(text='Go To Menu', size_hint=(.5, .10), pos=(20, 20))
        self.button.bind(on_press=self.change_screen)
        self.layout.add_widget(self.button)

    def change_screen(self, event):
        #sm.current = 'menu'
        self.manager.transition.direction = 'right'
        self.manager.transition.duration = 0.5 # 0.5 second
        self.manager.current = 'menu'

# Create the screen manager

sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))


class TestApp(App):

    def build(self):
        return sm


if __name__ == '__main__':
    TestApp().run()

Based on example (which uses kv language) from documentation Screen Manager基于文档屏幕管理器中的示例(使用 kv 语言)

You must learn kv language.你必须学习kv语言。

The Kivy language is a language dedicated to describing user interface and interactions. Kivy 语言是一种专用于描述用户界面和交互的语言。 You could compare this language to Qt's QML ( http://qt.nokia.com ), but we included new concepts such as rule definitions (which are somewhat akin to what you may know from CSS), templating and so on.您可以将此语言与 Qt 的 QML ( http://qt.nokia.com ) 进行比较,但我们包含了诸如规则定义之类的新概念,因此您可能知道一些新概念。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM