【发布时间】:2013-01-15 00:17:43
【问题描述】:
所以我在 kivy 用户支持(谷歌群组)上问过这个问题,但还没有得到任何答复,所以我会在这里尝试。
我有一组基于搜索工具创建的按钮。基本上它的工作方式是用户在文本输入框中输入搜索词,并根据输入文本,我的程序在数据库中搜索匹配的结果。如果有任何匹配的结果,则会创建按钮(将其文本作为匹配结果的文本)并且效果很好。但我的问题是,当按钮在循环中创建时,如何将它们各自的 on_press 分配给回调?例如,在我的例子中,代码如下所示:
在我的 .kv 文件中,我有 textinput 小部件:
<my rule>:
ti: Ti
TextInput:
id: Ti
on_text: root.function()
在我的 .py 文件中,我有以下内容(加上一些其他代码):
t1 = ObjectProperty()
function():
layout = StackLayout(orientation = 'lr-tb', size_hint = (0.3, 0.8), pos_hint = {'top' : 0.87})
root.clear_widgets() #added this so that upon user input (i.e. on_text event of textinput) only matching results create new buttons
list_1 = ['a', 'b', 'c'] #this is a list of matching results
root.add_widget(layout)
for item in list_1: #this is the loop which creates the buttons
buttons = Button(text = str(item), size_hint = (1, 0.1), background_color = [255, 0, 0, 1])
buttons.bind(on_press = self.t1.insert_text(str(item)))
layout.add_widget(buttons)
分配给回调的 on_press(如上所示)实际上不起作用。它应该完成的是,当用户按下该按钮时,textinput 小部件(self.ti1)中的文本应该更改为按钮文本(即按钮作为自动填充小部件工作)。我究竟做错了什么?
请注意,以上只是部分代码。主要代码的结构应该是这样,唯一的问题在于上面的sn-p。
谢谢!
【问题讨论】:
-
我向this question 询问了有关填充日期选择器的问题。我需要分配一个按钮来更改小部件日期的值。诀窍是使用 functools 模块,特别是 partial() 函数。
标签: kivy