簡體   English   中英

Kivy 屏幕管理器問題

[英]Kivy Screenmanager Issue

我正在嘗試使用 kivy 創建一個具有多個屏幕的移動應用程序(其中一個嵌入了 camara object),但下面的代碼只產生黑色 window,沒有顯示任何內容你能幫我弄清楚為什么這不起作用嗎?

    import kivy, ctypes
    from kivy.app import App
    from kivy.uix.label import Label
    from kivy.uix.screenmanager import ScreenManager, Screen
    from kivy.uix.camera import Camera
    from kivy.uix.button import Button
    from kivy.uix.boxlayout import BoxLayout

    class camera(Screen):
        def build(self):
            #camera obj
            self.camera_obj = Camera()
            self.camera_obj.resolution = (800,800)

            #button obj
            button_go_back = Button(text = "go back")
            button_go_back.size_hint = (.5,.2)
            button_go_back.pos_hint = {"x": .25, "y": .25}
    
            #layout
            layout = BoxLayout()
            layout.add_widget(self.camera_obj)
            layout.add_widget(button_go_back)

            return layout

    class MainWindow(Screen):
        def build(self):
            button_take_picture = Button(text = "take a picture")
            button_take_picture.size_hint = (.5,.2)
            button_take_picture.pos_hint = {"x": .25, "y": .25}

            layout = BoxLayout()
            lab = Label(text="some text")
            layout.add_widget(button_take_picture)
            layout.add_widget(lab)

            return layout


    screen_manager=ScreenManager()
    screen_manager.add_widget(MainWindow(name='main'))
    screen_manager.add_widget(camera(name='camera'))

    class NMS(App):
        def build(self):
            return screen_manager
    

    if __name__ == "__main__":
        ctypes.windll.shcore.SetProcessDpiAwareness(1)
        NMS().run()

由於您在 python 中初始化Screen s,因此您可能需要不構建__init__構造函數(據我所知,沒有名為build的默認方法用於Screen小部件)。

因此,您可以將MainWindow更改為這樣的東西,

class MainWindow(Screen):

    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        button_take_picture = Button(text = "take a picture")
        button_take_picture.size_hint = (.5,.2)
        button_take_picture.pos_hint = {"x": .25, "y": .25}

        layout = BoxLayout()
        lab = Label(text="some text")
        layout.add_widget(button_take_picture)
        layout.add_widget(lab)
        self.add_widget(layout) # Add all those in this screen.

類似的規則適用於其他屏幕。

暫無
暫無

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

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