Python3 tkinter组合框默认值

2024-08-11 23:14:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道以前有人问过这个问题,很多次了,但我还是不能让我的代码工作。。。在

我正在尝试让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)

这些都放在一个多帧窗口中,我从网上的一些来源复制的(我现在不记得在哪里),所以我不知道这是否阻碍了我的进步。如果我需要添加更多的代码,我可以,但这里是我的下拉列表被称为。。。在

^{pr2}$

在某一点上,我会把这个链接到一个数据库,所以当你加载它时,它会告诉你每个位置的瓶子是什么,但是现在,我要做的就是让它在每个插槽中显示“Jack”,而不是我现在拥有的[blank]。在

一般来说,我不是编程的呆子,但当涉及到OOP时,我是。在

另外,我在这里重写了这篇文章,所以如果你认为可能是打字错误,请告诉我,但也有可能我只是把它抄错了,在这里介绍了这些,而不是在我的实际代码中。在


Tags: 代码selfbox列表定义屏幕valuedef
2条回答

同样,您的代码是不可验证的,留下了很多问题,但是通过稍微清理代码,您可以使您的组合框易于重用,并相应地返回元素位置。在

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()

此外,我不知道您是否计划为每个组合框分配不同的值,但这种方法从长远来看会使事情变得更容易。在

你自己说过“垃圾收集”。所以不是tappos,而是放self.tappos。在

#tappos = [0 for x in range(7)]
self.tappos = [0 for x in range(7)]
...
#tappos[a] = DropDown(root)      
self.tappos[a] = DropDown(root)    # And so on. You get the picture.
...

相关问题 更多 >