从按钮功能创建的对象中发出检索值的问题

时间:2019-04-22 15:12:01

标签: python oop tkinter

我正在做一个小项目,但是在检索组合框中存储的值时遇到问题。该程序具有一个“加号”按钮,可在现有框的下方创建其他框。通过调用“创建”函数来创建它们,该函数创建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"]

2 个答案:

答案 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

请参阅以下内容:

Getting the selected value from combobox in Tkinter

Retrieving and using a tkinter combobox selection