我正在做一个小项目,但是在检索组合框中存储的值时遇到问题。该程序具有一个“加号”按钮,可在现有框的下方创建其他框。通过调用“创建”函数来创建它们,该函数创建ComboBox类的新实例,并在其中创建框并将其放到屏幕上。然后,应该使用一个单独的“提交”功能来循环并检索所有框值,并将它们存储在列表中。我的主要缺陷是我在变量名中使用了数据,但是在这种情况下我不知道该如何做。有人有替代解决方案吗?
(这里显示了一些屏幕外变量作为参数,但绝对不是问题的根源)
class ComboBox:
def __init__(self, master, counter, fields):
self.master = master
self.counter = counter
self.fields = fields
self.field_box = ttk.Combobox(width=20)
self.field_box["values"] = fields
self.field_box.grid(row=counter + 1, column=0, pady=5)
def get_value(self):
value = self.field_box.get()
return value
def create():
global entry_counter
name = "loop"+str(entry_counter-1)
name = ComboBox(window, entry_counter, fields)
values.append(name.get_value())
entry_counter += 1
def submit():
for i in range(1, entry_counter):
name = "loop" + str(entry_counter-1)
values.append(name.get_value())
例如,如果我创建了2个框并选择了“ test1”和“ test2”选项,则希望我的值列表包含["test1, "test2"]
答案 0 :(得分:2)
不确定我是否理解正确的问题,但是我想您正在询问如何循环抛出ComboBox的所有实例。您可以只创建一个全局数组,然后使用create()
方法向其中添加新实例:
comboboxes = []
def create():
...
comboboxes.append(new_instance)
def submit():
for combobox in comboboxes:
...
答案 1 :(得分:1)
使用.get()
使您处在正确的轨道上。我相信您的解决方案是您的get_value
函数还需要一个event
参数:
def get_value(self, event):
value = self.field_box.get()
return value
请参阅以下内容: