KivyMD MDDialog 不允许在一个对话框中输入多个文本
KivyMD MDDialog is not allowing multiple text inputs to be in one Dialog
我正在使用 KivyMD 并尝试创建一个具有多个复选框和多个文本输入的对话框,但是我无法在对话框中存在多个文本输入
这是我正在谈论的最小可复制示例:
from kivy.lang import Builder
from kivy.app import App
from kivy.properties import StringProperty
from kivy.uix.screenmanager import Screen
from kivymd.uix.list import OneLineAvatarIconListItem
from kivymd.app import MDApp
from kivymd.uix.dialog import MDDialog
from kivymd.uix.button import MDFlatButton
Builder.load_string(
'''
<ImportExcelFile>
orientation: "horizontal"
CheckboxLeftWidget:
id: check
group: "check"
MDTextField:
id: sheetName
hint_text: "Sheet Name"
size_hint_x: None
width: root.width/3
pos_hint: {'center_x': 0.5}
<FileList>
MDBoxLayout:
orientation: 'vertical'
'''
)
class ImportExcelFile(OneLineAvatarIconListItem):
sheet = StringProperty()
class FileList(Screen):
pass
class MainApp(MDApp):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.screen = FileList()
def build(self):
self.importDialogExcel = MDDialog(
title="Please select the sheets you would like to import, and then give them a name",
type="confirmation",
auto_dismiss=False,
items = [ImportExcelFile(text=f'Sheet {i}', sheet=f'Sheet {i}') for i in range(3)],
buttons=[
MDFlatButton(
text="CANCEL",
theme_text_color="Custom",
text_color=App.get_running_app().theme_cls.primary_color,
),
MDFlatButton(
text="OK",
theme_text_color="Custom",
text_color=App.get_running_app().theme_cls.primary_color,
),
],
)
self.importDialogExcel.open()
return self.screen
def on_start(self):
pass
MainApp().run()
这是生成的对话框:
每个检查都应该有一个文本框,但唯一得到一个的是底行,无论对话框中有多少项目(2、3、4 都经过测试),都会发生这种情况。有 1 件效果很好
有人知道为什么会这样吗?
问题是,您没有明确指定 MDTextField
的位置。这就是为什么即使它们在那里,它们也只是在父级的默认 pos
.
上相互堆叠
所以修复方法是将它们的 pos
明确声明为,
MDTextField:
id: sheetName
pos: root.pos
...
我正在使用 KivyMD 并尝试创建一个具有多个复选框和多个文本输入的对话框,但是我无法在对话框中存在多个文本输入
这是我正在谈论的最小可复制示例:
from kivy.lang import Builder
from kivy.app import App
from kivy.properties import StringProperty
from kivy.uix.screenmanager import Screen
from kivymd.uix.list import OneLineAvatarIconListItem
from kivymd.app import MDApp
from kivymd.uix.dialog import MDDialog
from kivymd.uix.button import MDFlatButton
Builder.load_string(
'''
<ImportExcelFile>
orientation: "horizontal"
CheckboxLeftWidget:
id: check
group: "check"
MDTextField:
id: sheetName
hint_text: "Sheet Name"
size_hint_x: None
width: root.width/3
pos_hint: {'center_x': 0.5}
<FileList>
MDBoxLayout:
orientation: 'vertical'
'''
)
class ImportExcelFile(OneLineAvatarIconListItem):
sheet = StringProperty()
class FileList(Screen):
pass
class MainApp(MDApp):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.screen = FileList()
def build(self):
self.importDialogExcel = MDDialog(
title="Please select the sheets you would like to import, and then give them a name",
type="confirmation",
auto_dismiss=False,
items = [ImportExcelFile(text=f'Sheet {i}', sheet=f'Sheet {i}') for i in range(3)],
buttons=[
MDFlatButton(
text="CANCEL",
theme_text_color="Custom",
text_color=App.get_running_app().theme_cls.primary_color,
),
MDFlatButton(
text="OK",
theme_text_color="Custom",
text_color=App.get_running_app().theme_cls.primary_color,
),
],
)
self.importDialogExcel.open()
return self.screen
def on_start(self):
pass
MainApp().run()
这是生成的对话框:
每个检查都应该有一个文本框,但唯一得到一个的是底行,无论对话框中有多少项目(2、3、4 都经过测试),都会发生这种情况。有 1 件效果很好
有人知道为什么会这样吗?
问题是,您没有明确指定 MDTextField
的位置。这就是为什么即使它们在那里,它们也只是在父级的默认 pos
.
所以修复方法是将它们的 pos
明确声明为,
MDTextField:
id: sheetName
pos: root.pos
...