我在 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.6
和kivymd 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 <CheckboxLeftWidget>
,但如果我将其更改为 CheckboxRightWidget
,它运行正常。
如果我将其更改为 CheckboxRightWidget
,我会收到错误消息:Unknown class <CheckboxRightWidget>
有趣。如果我使用 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 文件