使用循环的tkinter小部件列表不会显示

时间:2016-11-28 10:18:59

标签: python tkinter widget

请允许我解释我面临的问题。我是一名几个月前开始学习Python的本科生。所以,我是新人,如果专家认为他们很天真,请耐心等待我。

意图非常简单。我想在tkinter父框架中并行放置5个菜单按钮(比如在一行中,好吧,这不是紧迫的问题)。我做的是引入5个子帧并逐个放置菜单按钮。使用子框架的想法是为中心和更好的布局腾出空间。使用最直接的方式,我逐个完成:定义一个子框架并放置一个菜单按钮。一切都运作良好。

现在我试图避免重复的代码并使用for循环布置菜单按钮和子框架,因为除了网格位置和标签不同之外,子框架和按钮在技术上是相同的。我想出了以下代码。

Python编译器没有报告任何错误。但是,只有最后一个按钮("其他")显示,而其他按钮丢失。我很难找出究竟出了什么问题。

indBtnFrame = [tkinter.Frame(self.parent)] * 5   
    for i in range(len(indBtnFrame)):
        column_index = (i+1)*2
        indBtnFrame[i].grid(column=column_index,
                        row=0,
                        columnspan=2,
                        rowspan=1,
                        sticky="WENS")
        for r in range(1): # 1 row in total.
            indBtnFrame[i].rowconfigure(r, weight=1)
        for c in range(1): # 1 column in total.
            indBtnFrame[i].columnconfigure(c, weight=1)
        # To fix the grid size. 
        indBtnFrame[i].grid_propagate(False)

    indBtnLabel = ["Street",
                   "City",
                   "Postcode",
                   "Province",
                   "Other"]

    indBtn = []
    for i in range(len(indBtnLabel)):
        button_label = tkinter.StringVar()
        button_label.set(str(indBtnLabel[i]))
        temp_widget = tkinter.Menubutton(indBtnFrame[i],
                                     textvariable=button_label,
                                     relief=tkinter.GROOVE)
        indBtn.append(temp_widget)

    for i in range(len(indBtn)):
        indBtn[i].grid(column=0, row=0,
                       columnspan=1, rowspan=1,
                       sticky="WENS")
        indBtn[i].menu = tkinter.Menu(indBtn[i], tearoff=0)
        indBtn[i]["menu"] = indBtn[i].menu

0 个答案:

没有答案