我在 Python/KivyMD 中制作了 MDDialog 但没有正确显示

Posted

技术标签:

【中文标题】我在 Python/KivyMD 中制作了 MDDialog 但没有正确显示【英文标题】:I made MDDialog in Python/KivyMD but doesn't showing up correctly 【发布时间】:2021-09-25 18:38:06 【问题描述】:

游戏是用python 3.9.6kivymd 0.104.2 制作的。在其他人的帮助下,我制作了带有复选框和“确认”按钮的 MDDialog。如果未选中其中一个复选框,我想禁用按钮。如果其中一个被选中,我想启用它。但唯一的问题是 MDDialog 正在显示,但除了“确认”按钮和 MDDialog 的标题之外什么都没有。这是我的python/kivymd 代码:

from kivy.lang import Builder
from kivy.properties import BooleanProperty
from kivy.uix.button import Button
from kivymd.app import MDApp
from kivymd.uix.dialog import MDDialog
from kivymd.uix.list import OneLineAvatarIconListItem
from kivymd.uix.selectioncontrol import MDCheckbox

kv = '''
#:import Factory kivy.factory.Factory
<ItemConfirm>
    divider: None
    CheckboxLeftWidget:
        id: check
        score: root.text  # makes the score text available from the Checkbox
        group: "check"
        on_active: app.check_active(self.group)  # update app.active

<ConfirmButton@MDFlatButton>:
    text: 'CONFIRM'
    disabled: not app.active  #  disabled when app.active is False
    on_release: app.score_limit()

<ConfirmDialog>:
    title: "Score Limit"
    type: "confirmation"
    auto_dismiss: False
    items: [ Factory.ItemConfirm(text="30"), Factory.ItemConfirm(text="40"), Factory.ItemConfirm(text="50"), Factory.ItemConfirm(text="60") ]
    buttons: [ Factory.ConfirmButton() ]
'''

class ItemConfirm(OneLineAvatarIconListItem):
    pass


class ConfirmDialog(MDDialog):
    pass


class TestApp(MDApp):
    active = BooleanProperty(False)  # keeps track if any Checkbox is active

    def build(self):
        Builder.load_string(kv)
        return Button(text='Do It', on_release=self.show_confirmation_dialog)

    def show_confirmation_dialog(self, *args):
        self.dialog = ConfirmDialog()
        self.dialog.open()

    def score_limit(self, *args, **kwargs):
        print('score limit:', self.check_active('check'))
        self.dialog.dismiss()
        self.dialog = None  # required to eliminate current group of Checkboxes
        self.active = False

    def check_active(self, group):  # update app.active and return current score limit (or None)
        for cb in MDCheckbox.get_widgets(group):
            if cb.active:
                self.active = True
                return cb.score
        self.active = False
        return None


TestApp().run()

【问题讨论】:

您是否看到任何错误消息? 不!它运行良好,但不显示其中的内容 运行您的代码时,我收到错误消息:Unknown class &lt;CheckboxLeftWidget&gt;,但如果我将其更改为 CheckboxRightWidget,它运行正常。 如果我将其更改为 CheckboxRightWidget,我会收到错误消息:Unknown class &lt;CheckboxRightWidget&gt; 有趣。如果我使用 Python v3.7.9 和 KivyMD v0.104.1 运行代码,那么 CheckboxLeftWidget 是未知的。如果我使用 Python v3.8.10 和 KivyMD 0.104.2.dev0 运行 cod,那么 CheckboxRightWidget 是未知的。必须是 KivyMD 版本之间的变化。但在任何一种情况下,如果我使用已知的 Checkbox???Widget 它工作正常,并且 CheckboxWidget 的两个版本看起来相同。 【参考方案1】:

由于问题似乎是 120 个字符的行限制,kivy 确实为此提供了解决方案,即继续字符 (\)。在此处查看已回答的问题:Can you wrap lines in a kivy file?

【讨论】:

以上是关于我在 Python/KivyMD 中制作了 MDDialog 但没有正确显示的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“屏幕”对象在 Python KivyMD 中没有属性“文本”

Python + KivyMD 和代码优化上的小部件之间的交互和删除

尝试使用 KivyMD 和 Python 显示 PDF 文件

带有额外空格的 Python KivyMD MDBottomSheet

什么是MDD,DDD,TDD?

VC 运行时库 /MD/MDd 和 /MT/MTd