gpt4 book ai didi

python-3.x - Kivy:弹出窗口只能有一个小部件作为内容

转载 作者:行者123 更新时间:2023-12-04 13:22:29 25 4
gpt4 key购买 nike

我在 .kv 文件中使用弹出窗口时遇到问题。我知道弹出窗口只能有一个小部件作为它的内容,但是如果我只将 GridLayout 作为包含标签和按钮的子项传递,这不应该工作吗?

这是我的 Python 代码:

import kivy, LabelB
from kivy.app import App
from kivy.graphics import Color, Rectangle
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.properties import ObjectProperty, StringProperty
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

Builder.load_file('main.kv')

class CustomPopup(Popup):
pass

class MenuScreen(Screen):

def open_popup(self):
the_popup = CustomPopup()
the_popup.open()

class SurveyScreen(Screen):
pass

sm = ScreenManager(transition=FadeTransition())
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SurveyScreen(name='survey'))

class MainApp(App):

def build(self):
return sm

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

这是我的 .kv 文件:
<CustomPopup>:
title: 'Terms of Service'
size_hint: .5, .5
auto_dismiss: False
GridLayout:
cols: 1
Label:
size_hint: .9, .9
halign: 'center'
valign: 'middle'
text: 'Insert terms of service text here'
text_size: self.width, None
Button:
text: 'Close'
on_release: root.dismiss()

<MenuScreen>:

FloatLayout:

canvas.before:
Rectangle:
source: 'menu.png'
size: self.size
pos: self.pos

Label:
pos_hint: {'x': .7, 'y': .85}
text_size: self.size
font_name: 'Arial'
font_size: 26
text: 'Sample'
bold: True

Button:
text: 'Take Survey'
size_hint: .2, .1
pos_hint: {'x': .15, 'y': .1}
on_release:
root.manager.transition.duration = 0.5
root.manager.current = 'survey'

Button:
text: 'Terms of Service'
size_hint: .2, .1
pos_hint: {'x': .6-self.size_hint_x, 'y': .1}
on_release: root.open_popup()

Button:
text: 'Quit'
size_hint: .2, .1
pos_hint: {'x': .85-self.size_hint_x, 'y': .1}
on_release: app.stop()

<SurveyScreen>:

GridLayout:
cols: 1
padding: 20
spacing: 10

Label:
text: 'WELCOME!'
font_size: 20

Label:
text: 'Some boring text'

错误如下:“弹出窗口只能有一个小部件作为内容”

我在这里遗漏了一些明显的东西吗?提前致谢。

最佳答案

是的,它应该像你说的那样工作,你的代码是正确的。

问题是 .kv 文件的加载是重复的。作为您的 App子类被称为 MainApp , main.kv如果它在同一目录中,则会自动加载(文档:How to load kv)。另一方面,您使用 Builder.load_file ('main.kv') 显式上传文件。 .

您必须删除对 Builder 的调用或重命名 MainApp/main.kv .

如果您删除对 Builder.load_file 的调用您必须创建 ScreenManager加载 .kv 后的实例。您可以执行以下操作:

class MainApp (App):

def build (self):
sm = ScreenManager (transition = FadeTransition ())
sm.add_widget (MenuScreen (name = 'menu'))
sm.add_widget (SurveyScreen (name = 'survey'))
return sm

关于python-3.x - Kivy:弹出窗口只能有一个小部件作为内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48694764/

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