【问题标题】:problem with python kivy - screen refresh issuespython kivy的问题-屏幕刷新问题
【发布时间】:2021-06-20 05:16:39
【问题描述】:

我在 python 中遇到了 kivy 的问题。 我在 kivy 网站上开始了教程 - pong in kivy。但是有一个小问题 - 当我在屏幕上创建一个球并且我想移动它时 - 在屏幕上创建了许多球 - 一帧一个球并且它们没有消失。 我放弃了,我在 youtube 上开始了第二个教程 - 创建登录屏幕。但是我对屏幕变化的动画也有同样的问题。 您只需要在电影中观看(youtube):

https://youtu.be/xXWq5XgQPnE

https://youtu.be/U6sKKLRD6Vk

有登录界面的代码:

python 文件:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder


class MainWindow(Screen):
    pass

class SecondWindow(Screen):
    pass

class WindowManager(ScreenManager):
    pass

kv = Builder.load_file("kvfile.kv")

class MyMainApp(App):
    def build(self):
        return kv



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

kivy 文件:

#:kivy 2.0.0


WindowManager:
    MainWindow:
    SecondWindow:


<MainWindow>:
    name: "main"
    GridLayout:
        cols: 1

        GridLayout:
            cols: 2
            Label:
                text: "Name:"
            TextInput:
                id: uname
                multilane: False
            Label:
                text: "Password:"
            TextInput:
                id: upass
                multilane: False
        Button:
            text: "Log in"
            on_release:
                app.root.current = "second"
<SecondWindow>:
    name: "second"
    Button:
        text: "Go back"
        pos_hint: {"x": 0.3, "y": 0.2}
        size_hint: 0.4, 0.2
        on_release:
            app.root.current = "main"

我不知道该怎么做。有什么帮助吗?

【问题讨论】:

    标签: python kivy refresh screen


    【解决方案1】:

    你必须给你的屏幕一个名字。

    WindowManager:
    
        MainWindow:
            name: 'main'
    
        SecondWindow:
            name 'second'
    

    不要打电话给app.root.current,而是打电话给root.manager.current

    这里有一些可以在我的电脑上运行的示例代码...

    from kivy.app import App
    from kivy.uix.screenmanager import ScreenManager, Screen
    from kivy.lang import Builder
    
    
    class MainWindow(Screen):
        pass
    
    
    class SecondWindow(Screen):
        pass
    
    
    class WindowManager(ScreenManager):
        pass
    
    
    kv = Builder.load_string(
        """
    WindowManager:
        MainWindow:
            name: 'main'
        SecondWindow:
            name: 'second'
    
    
    <MainWindow>:
        name: "main"
        GridLayout:
            cols: 1
    
            GridLayout:
                cols: 2
                Label:
                    text: "Name:"
                TextInput:
                    id: uname
                    multilane: False
                Label:
                    text: "Password:"
                TextInput:
                    id: upass
                    multilane: False
            Button:
                text: "Log in"
                on_release:
                    root.manager.current = "second"
    <SecondWindow>:
        name: "second"
        Button:
            text: "Go back"
            pos_hint: {"x": 0.3, "y": 0.2}
            size_hint: 0.4, 0.2
            on_release:
                root.manager.current = "main"
    """
    )
    
    
    class MyMainApp(App):
        def build(self):
            return kv
    
    
    if __name__ == '__main__':
        MyMainApp().run()
    
    

    【讨论】:

    • 不要打电话给app.root.current,而是打电话给root.manager.current(见编辑后的答案)
    • 我粘贴了您的代码,我遇到了同样的问题。我认为问题不在于kivy,但我的选择或smth是错误的……我不知道。我尝试了在教程中找到的其他代码,结果相同。看起来屏幕刷新有问题。我试过重新安装kivy,但也没有结果。
    猜你喜欢
    • 2010-10-28
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多