我有一个窗口,显示从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
正在被垃圾回收,解决方案是使用一个类。但这对我不起作用。这些东西使我发疯。请帮帮我。
答案 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)