我知道很久以前就已经问过了这个问题,但我仍然无法让我的代码工作......
我试图在屏幕上显示7个下拉列表,并为每个列表选择默认值。我可以自己显示这些框,当你下拉每个框时,我定义的值都在列表中,但是当我的gui加载时,我无法使用任何值来默认它们。我读了一些关于垃圾收集问题的帖子,所以我按照海报的建议把它放在一个课堂里。就是这个......
class DropDown(object):
def __init__(self, parent):
self.parent = parent
def tapoptions(self):
self.box_value = StringVar()
self.box = ttk.Combobox(self.parent, textvariable=self.box_value, state="readonly")
self.box['values'] = ('Empty','Jack','Coke','Tonic')
self.box.current(1)
这一切都安置在一个多帧窗口中,我从一些来源在线复制(我现在不记得在哪里),所以我不知道这是否阻碍了我在这里的进展。如果我需要添加更多代码,我可以,但这里是我的DropDown被调用的位...
class OnTap(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
body = tk.Frame(self)
body.grid(row=1, column=1, sticky="ew")
tappos = [0 for x in range(7)]
for a in range(7):
l = ttk.Label(body, text="Bottle "+str(a+1)+": ")
l.grid(row=a+1, column=0)
tappos[a] = DropDown(body)
tappos[a].tapoptions()
tappos[a].box.grid(row=a+1, column=1)
在某些时候我会将它链接到一个数据库,所以当你加载它时,它会告诉你每个位置都有什么瓶子,但是现在,我想要做的只是让它出现在“杰克”中当你去那个页面时,在每个插槽中,而不是我现在拥有的[空白]。
我不是一般编程的菜鸟,但我是OOP。
另外,我在这里重写了这个,所以如果你认为可能是问题的错别字,请告诉我,但我也有可能错误地转录它,并在这里介绍,而不是在我的实际代码。
答案 0 :(得分:3)
你自己说,"垃圾收集"。因此,不是for l in h:
r=l.rfind(",")+1
s=l[r:-2]
j=0
while j<18:
if s[j]==1:
f=codecs.open("genre_"+str(j)+".csv","w","utf-8")
f.write(l)
f.close()
j=j+1
,而是tappos
。
self.tappos
答案 1 :(得分:1)
原样,您的代码无法验证,留下了很多问题,但通过稍微清理代码,您可以轻松地重复使用Combobox,并相应地返回元素位置。
from tkinter import ttk, Tk, Frame
class DropDown(ttk.Combobox):
def set_list(self, argslist):
self['values'] = argslist
self.current(1)
self.pack()
class OnTap:
def __init__(self, parent):
self.parent = parent
body = Frame(self.parent)
body.grid(row=1, column=1, sticky="ew")
list1 = ['Empty', 'Jack', 'Coke', 'Tonic']
tappos = [0 for x in range(7)]
for i in range(5):
l = ttk.Label(body, text="Bottle "+str(i+1)+": ")
l.pack()
tappos[i] = DropDown(body).set_list(list1)
if __name__ == '__main__':
root = Tk()
app = OnTap(root)
root.mainloop()
此外,我不知道您是否计划为每个Combobox分配不同的值,但这种方式会使长期运行更容易。