Kivy:弹出窗口只能有一个小部件作为内容

2024-04-25

我在 .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如果位于同一目录中,则会自动加载(文档:如何加载kv https://kivy.org/docs/guide/lang.html#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kivy:弹出窗口只能有一个小部件作为内容 的相关文章

  • 如何将每个句子的第一个字母大写?

    我正在尝试编写一个程序 将每个句子的第一个字母大写 这是我到目前为止所拥有的 但我不知道如何在句子之间添加句号 例如 如果我输入 你好 再见 输出是 你好再见 并且期间已经消失 string input Enter a sentence s
  • sklearn pipeline + keras顺序模型-如何获取历史记录?

    Keras https keras io模型 当 fit被调用时 返回一个历史对象 如果我将此模型用作 sklearn 管道的一步 是否可以检索它 顺便说一句 我正在使用 python 3 6 提前致谢 History 回调记录每个时期的训
  • Python ttk.combobox 强制发布/打开

    我正在尝试扩展 ttk 组合框类以允许自动建议 我到目前为止的代码运行良好 但我想让它在输入一些文本后显示下拉列表 而不从小部件的输入部分移除焦点 我正在努力解决的部分是找到一种强制下拉的方法 在 python 文档中我找不到任何提及这一点
  • 属性错误:模块“flax”没有属性“optim”

    我的代码如下 pip install flax init params TransporterNets init key init img init text init pix params print f Model parameters
  • 模块“tensorflow”没有属性“random_uniform”

    我尝试执行一些深度学习应用程序 并收到模块 tensorflow 没有属性 random uniform 错误 在 CPU 上 代码运行良好 但速度非常慢 为了在 GPU 上运行代码 我需要更改一些定义 下面是我的代码 有任何想法吗 def
  • 在openjdk:7-jre-alpine docker上如何安装python 3.6

    直到大约一周前 我才在 java 图像上成功使用 python 3 6 脚本 如下所示 FROM openjdk 7 jre alpine RUN apk update apk upgrade apk add no cache bash a
  • 如何得到将外力映射到广义力的矩阵?

    给定一个多体植物 我需要找到将外力 lambda 转换为广义力的矩阵 IE 以下方程中的 Phi 取自 Scott Kuindersma Frank Permenter 和 Russ Tedrake 的 稳定动态运动的有效可解二次规划 我的
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • 在 .vscode 中调试时遇到问题

    我最近在 VSCODE 中调试时遇到了一个大问题 我尝试通过搜索网站并重新安装一些扩展来自行修复它 而不是在中显示我的结果调试控制台它将以下输出写入我的terminal cd Users AVFL Documents Programming
  • 如何将one-hot向量转换为多标签?

    我有一项多分类任务 并且我得到了像这样的单热类型预测 0 1 1 0 1 0 1 0 1 我希望将这个单热向量转换为标签 例如 1 2 1 0 2 我已经尝试过 tf argmax 但它不起作用 那么我该如何处理呢 使用列表理解 oheLi
  • java中如何制作弹出窗口

    我目前正在开发一个java应用程序 我想显示一个包含文本区域和按钮的新窗口 你有什么想法 同样的答案 J选项面板 http docs oracle com javase 7 docs api javax swing JOptionPane
  • SQLite 在使用之间不保存数据

    我制作了一个包含以下内容的模块 import sqlite3 as sq connection sq connect test db cursor connection cursor cursor execute DROP TABLE IF
  • Python3 类型错误:replace() 参数 1 必须是 str,而不是 int

    我已经尝试了几天让这段代码在 MacOS 上运行 但没有成功 你能看一下我错过了什么吗 运行 python 3 6 我已经上传了整个代码 多谢 usr bin env python3 from future import print fun
  • ValueError:维度 (-1) 必须在 [0, 2) 范围内

    我的python版本是3 5 2 我已经安装了keras和tensorflow 并尝试了官方的一些示例 示例链接 示例标题 用于多类 softmax 分类的多层感知器 MLP https keras io getting started s
  • Buildozer Numpy RuntimeError:工具链损坏:无法链接简单的 C 程序

    用 Python 编写我的第一个 Android 应用程序并使用 Buildozer 对其进行打包 因为稍后在项目中需要使用numpy 所以我尝试打包以下测试代码 import numpy import kivy kivy require
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • pip install django_compressor 时命令 cl.exe 失败

    我发布此消息是因为我遇到了这个问题 并且已经尝试解决这个问题好几天了 但未能成功 当我尝试安装 django compressor pip install django compressor 时 我遇到以下错误 请参阅附件 我在网上搜索解决
  • Python 中 eval("input()") 和 eval(input()) 之间的区别

    我正在尝试以下功能 x eval input 输入为 123 x 的类型也是int 它工作正常 In 22 x eval input enter enter 123 In 24 print type x
  • 将具有多个时区的 pandas 列转换为单个时区

    Problem 我在 pandas DataFrame 中有一个列 其中包含带有时区的时间戳 此列中有两个不同的时区 我需要确保只有一个 这是该列末尾的输出 260003 2019 05 21 12 00 00 06 00 260004 2
  • 如何从 PyObject 获取指向字符串的 char*

    我怎样才能得到一个char from a PyObject它指向一个字符串 例如 这是 python 脚本 Test Connect 272 22 20 65 1234 这是 C 代码 static PyObject Connect PyO

随机推荐