Python3 tkinter组合框默认值

时间:2016-06-05 19:34:00

标签: python combobox tkinter

我知道很久以前就已经问过了这个问题,但我仍然无法让我的代码工作......

我试图在屏幕上显示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。

另外,我在这里重写了这个,所以如果你认为可能是问题的错别字,请告诉我,但我也有可能错误地转录它,并在这里介绍,而不是在我的实际代码。

2 个答案:

答案 0 :(得分:3)

你自己说,&#34;垃圾收集&#34;。因此,不是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分配不同的值,但这种方式会使长期运行更容易。