为什么即使使用类进行初始化,.current也不会为组合框设置默认值?

时间:2019-06-24 02:08:45

标签: python tkinter

我有一个窗口,显示从MySql服务器获取的多个记录的树视图。我希望显示另一个带有条目和组合框的弹出窗口,并通过选定记录的信息来设置其默认值。

问题是它什么也不显示,相反,这些框留有空白

我尝试设置textvariable=var.get(),但这会使组合框无法更改值并收集用户的输入。

我也尝试过使用一个类:

class Application:

    def __init__(self, parent, vars, pos_x, pos_y, to_test, width):
        self.parent = parent
        self.vars = vars
        self.pos_x = pos_x
        self.pos_y = pos_y
        self.to_test = to_test
        self.width = width
        self.combo()

    def combo(self):
        self.box_value = tk.StringVar()
        self.box = ttk.Combobox(self.parent, width=self.width, 
                                textvariable=self.box_value)
        self.box['values'] = self.vars
        for i in range(len(self.vars)):
            if not self.to_test == 'None':
                if self.vars[i] == self.to_test:
                    self.box.current(i)
        self.box.place(x=self.pos_x, y=self.pos_y)

#I have the function edit_tree called in a button of a previous window win
#The tree is the tree view displayed in the previous window
def edit_tree(win, tree):
    selected = tree.selection()
    edit_vendor_window = tk.Toplevel(win)
    edit_vendor_window.geometry('600x570')
    tk.Label(edit_vendor_window, text='Report Date:').place(x=10, y=10)

    vars = ('2018', '2019')
    Application(edit_vendor_window, vars, 150, 10, tree.item(selected, 
                'values)[0], 5)

我在其他一些答案中看到问题是StringVar正在被垃圾回收,解决方案是使用一个类。但这对我不起作用。这些东西使我发疯。请帮帮我。

1 个答案:

答案 0 :(得分:0)

您的self.vars[i]self.to_test可能不是同一类型,因此您的for循环永远不会到达比较部分。尝试将两者都转换为Str,并删除textvariable中的Combobox参数。

def combo(self):
    self.box = ttk.Combobox(self.parent, width=self.width)
    self.box['values'] = self.vars
    for i in range(len(self.vars)):
        if not self.to_test == 'None':
            if str(self.vars[i]) == str(self.to_test):
                self.box.current(i)
    self.box.place(x=self.pos_x, y=self.pos_y)