gpt4 book ai didi

python - Kivy 的 ScreenManager 和 Popups 不想一起工作

转载 作者:行者123 更新时间:2023-11-28 18:27:40 25 4
gpt4 key购买 nike

如标题所述 - 我被卡住了。我一直在研究代码,只要我将 ScreenManager 和 Popup 分开,一切都会正常进行。一旦合并 - 他们拒绝合作。无论如何,这是显示我遇到的问题的简单应用程序。

from kivy.lang import Builder
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.popup import Popup
from kivy.uix.screenmanager import Screen, ScreenManager

class First(GridLayout,Screen):
def show_popup(self):
Popp().open()
pass

class Second(Screen):
pass

class Popp(Popup):
pass

class ScreenManagement(ScreenManager):
pass

app = Builder.load_file("main.kv")

class MainApp(App):
def build(self):
return app


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

和main.kv文件

ScreenManagement:
First:
Second:

<First>:
name:"First"
rows: 2
Button:
text: "FirstButton"
on_release: app.root.current = "Second"
Button:
text: "Show popup"
on_release: root.show_popup()

<Second>:
name:"Second"
Button:
text: "BUTTON"
on_release: app.root.current = "First"

<Popp>:
title: "testing"
text: "Hello world"
size_hint: None,None
size: 400,400
auto_dismiss: False
Button:
text: "Okay"
on_press: root.dismiss()

应用程序启动,第一个和第二个屏幕都在工作,但是当我尝试弹出窗口时,我最终得到:

kivy.uix.popup.PopupException: Popup can have only one widget as content

Screen 以某种方式被视为 Popp 内部的一个小部件?还是我严重误解了 kivy 文档?

最佳答案

这是加载 kv 文件的错误,在这种情况下应该抛出异常。

您在代码中所做的是两次加载 kv 文件,这会导致一些奇怪的行为。只需删除 Builder.load_file(..) 即可。该文件将自动加载。

此外,永远不要像 class First(GridLayout, Screen) 这样对小部件进行双重子类化,因为这可能会导致一些问题。相反,在屏幕内创建一个网格布局。

关于python - Kivy 的 ScreenManager 和 Popups 不想一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40140185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com