请允许我解释我面临的问题。我是一名几个月前开始学习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