簡體   English   中英

屏幕管理器未在 Kivy Python 中返回所需的 Output

[英]The Screen Manager is not returning Desired Output in Kivy Python

Python output shell中沒有顯示這樣的錯誤。

我想要的是,第一頁應該是登錄頁面,或者在這里,應該顯示“連接頁面”然后歡迎,然后最后顯示一組從 0 到 99 的按鈕。

這是代碼:

import kivy
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
from kivy.uix.screenmanager import ScreenManager, Screen, FallOutTransition
from kivy.uix.scrollview import ScrollView
from kivy.properties import StringProperty
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.core.window import Window


class ConnectingPage(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.cols = 2

        self.add_widget(Label(text = "Usename:"))
        self.username = TextInput(multiline=False)
        self.add_widget(self.username)

        self.add_widget(Label(text = "Password:"))
        self.password = TextInput(multiline=False,password = True)
        self.add_widget(self.password)

        self.joinbutton = Button(text="Join")
        self.joinbutton.bind(on_release = self.click_join_button)
        self.add_widget(Label())  
        self.add_widget(self.joinbutton)
        
    def click_join_button(self, instance):
        username = self.username.text
        password = self.password.text
    #if username == "venu gopal" and password == "venjar":

        MyApp.screen_manager.current = "Info"
        MyApp.screen_manager.current = "Chat"
        
class InfoPage(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.cols = 1
        self.message = Label(text = "welcome",halign="center", valign="middle", font_size=30)
        self.add_widget(self.message)

class SomeApp(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
        # Make sure the height is such that there is something to scroll.
        layout.bind(minimum_height=layout.setter('height'))
        for i in range(100):
            btn = Button(text=str(i), size_hint_y=None, height=40)
            layout.add_widget(btn)
        root = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
        root.add_widget(layout)
        if __name__ == "__main__":
            runTouchApp(root)

class MyApp(App):
    screen_manager = ScreenManager(transition=FallOutTransition(duration=2))  # this make screen_manager a class vaiable

    def build(self):
        # self.screen_manager = ScreenManager()
        self.connecting_page = ConnectingPage()
        screen = Screen(name='Connect')
        screen.add_widget(self.connecting_page)
        self.screen_manager.add_widget(screen)  # add screen to ScreenManager

        # Info page
        self.info_page = InfoPage()
        screen = Screen(name='Info')
        screen.add_widget(self.info_page)
        self.screen_manager.add_widget(screen)  # add screen to ScreenManager

        # Chat App
        self.chat_app = SomeApp()
        screen = Screen(name='Chat')
        screen.add_widget(self.chat_app)
        self.screen_manager.add_widget(screen)  # add screen to ScreenManager 

        # return ConnectingPage()
        return self.screen_manager


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

問題是:按鈕集在開始時顯示。 當按下十字關閉 kivy window 時,將顯示登錄頁面,然后顯示“歡迎”,然后再次顯示按鈕。 我希望它從第二步開始顯示。

我相信代碼中的“第 61 行”是個問題。 當代碼運行時,它首先顯示按鈕等等。

請幫我找到上述問題的解決方案。

您的SomeApp class 的__init__()方法啟動了一個運行以下行的App

    if __name__ == "__main__":
        runTouchApp(root)

並且runTouchApp()在該App完成之前不會返回。 因此,當您運行代碼時,它會停止一行:

self.chat_app = SomeApp()

要解決這個問題,只需替換:

    if __name__ == "__main__":
        runTouchApp(root)

和:

    self.add_widget(root)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM