基本上在 Spinner 之后,我将为每个选项创建一个 Python 构建的小部件,以根据所选的“类型”收集输入数据。现在的问题是,当我像这样运行它时,标签被放置在屏幕中间,忽略已经放置的每个小部件。我需要控制它在现有布局中的放置位置。
这是Python部分
class NewTaskScreen(Screen):
testlabel = Label(text="test label")
#need to create elements in a certain position on the grid/box
def selecttype(self, instance):
self.add_widget(self.testlabel)
class TaskReminder(App):
def build(self):
# Create the screen manager
sm = ScreenManager()
#sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(NewTaskScreen(name='newtask'))
return sm
还有 Kyvi 部分
<NewTaskScreen>:
BoxLayout:
orientation: 'vertical'
Button:
text: "Back to menu"
font_size: 64
size: 100, 50
on_release: root.manager.current = 'menu'
GridLayout:
cols:2
Label:
text: "Name:"
TextInput:
multiline:False
Label:
text: "Description:"
TextInput:
multiline:False
Label:
text: "Type:"
Spinner:
text: 'Constant'
values: 'Constant', 'Daily', 'Monthly', 'Yearly', 'OneOff'
Button:
text: 'test'
font_size: 64
size: 100, 50
on_release: root.selecttype(self)
我尝试更改 add_widget 方法上的索引变量,但唯一改变的是小部件是在所有内容的前面还是在所有内容的后面。我知道,如果我在 main 中调用的类是 GridLayout,那么 add_widget 方法将在调用后立即插入它来工作。示例:
class ExampleGrid(GridLayout):
def __init__(self, **kwargs):
super(ExampleGrid, self).__init__(**kwargs)
self.cols = 2
self.submit = Button(text="Submit", font_size=32)
self.submit.bind(on_press=self.press)
self.add_widget(self.submit)
def press(self, instance):
self.add_widget(Label(text="test label"))
class TestApp(App):
def build(self):
return ExampleGrid()
问题是我有点需要多个屏幕来实现未来的功能。 也许这很容易解决,但我已经搜索了几个小时的答案。 请帮忙。
如果我正确理解你的问题,你想将
testlabel
添加到 GridLayout
。为此,只需将 id
添加到 GridLayout
:
<NewTaskScreen>:
BoxLayout:
orientation: 'vertical'
Button:
text: "Back to menu"
font_size: 64
size: 100, 50
on_release: root.manager.current = 'menu'
GridLayout:
id: grid
然后,在
selecttype()
方法中,使用新的 id
,如下所示:
def selecttype(self, instance):
self.ids.grid.add_widget(self.testlabel)