【问题标题】:Kivy button press to next pageKivy 按钮按下到下一页
【发布时间】:2021-07-19 01:21:26
【问题描述】:
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button


class LoginScreen(GridLayout):

    def __init__(self, **kwargs):
        super(LoginScreen, self).__init__(**kwargs)
        self.cols = 2

        self.submit = Button(text='Order', font_size=40)
        self.add_widget(self.submit)
        self.submit.bind(on_press=self.pressed)

    def pressed(self, instance):
        pressing = Secondtab()
        pressing()


class Secondtab(GridLayout):
    def __init__(self, **kwargs):
        super(Secondtab, self).__init__(**kwargs)
        self.cols = 5

        self.submit = Button(text='Drinks', font_size=40)
        self.add_widget(self.submit)

        print('check')

    def __call__(self):
        print('new tab')





class MyApp(App):

    def build(self):
        return LoginScreen()


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

所以当我按下第一个按钮时,我希望窗口更改为新布局。我坚持制作一个新的网格类并调用它会起作用,但它并没有像我预期的那样起作用。我不希望按钮打开一个新窗口,而是希望当前窗口刷新到新布局。

【问题讨论】:

标签: class button kivy


【解决方案1】:

正如@John Anderson 建议的那样。看看screen manager 小部件。 “当前窗口”必须是填充的 screen 小部件,您可以通过将下一个屏幕的名称分配给 current 属性来更改当前屏幕。

【讨论】:

    【解决方案2】:

    我猜这会对你有所帮助。使用ScreenManager:

    from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
    
    class LoginScreen(GridLayout):
    
        def __init__(self, **kwargs):
            super(LoginScreen, self).__init__(**kwargs)
            self.cols = 2
    
            self.submit = Button(text='Order', font_size=40)
            self.add_widget(self.submit)
            self.submit.bind(on_press=self.pressed)
    
        def pressed(self, instance):
            pressing = Secondtab()
            pressing()
            myapp.screen_manager.transition = SlideTransition(direction='left', duration=.25)    #You can change transition speed or you could just remove it to set it on default
            myapp.screen_manager.current = 'Secondtab'
    
    class MyApp(App):
    
        def build(self):
            return LoginScreen()
    
            self.screen_manager = ScreenManager()
    
            self.loginscreen = LoginScreen()
            screen = Screen(name='LoginScreen')
            screen.add_widget(self.loginscreen)
            self.screen_manager.add_widget(screen)
    
            self.secondtab = Secondtab()
            screen = Screen(name='Secondtab')
            screen.add_widget(self.secondtab)
            self.screen_manager.add_widget(screen)
    
            return self.screen_manager
    

    【讨论】:

      猜你喜欢
      • 2013-09-12
      • 2018-01-25
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多