【发布时间】:2016-08-26 17:56:27
【问题描述】:
我正在尝试制作一个 GUI,只要用户在 ttk.entry 字段中输入一个整数,就需要在其下方显示许多复选按钮。例如,如果他们在输入小部件中输入“5”,则输入字段下方需要出现 5 个复选按钮。
编辑:
我最终使用了什么:
self.number_of_stages = tk.IntVar()
self.check_box_dict={}
self.num_of_stages={}
self.stagetempvar={}
self.equipment_widgets={}
def centrifugal_compressor_widgets(self):
self.equipment_widgets.clear()
self.equipment_widgets["NumOfStagesLabelCentComp"]=tk.Label(self.parent, text="Number of Stages:", bg="white")
self.equipment_widgets["NumOfStagesLabelCentComp"].place(relx=0.5, y=260, anchor="center")
self.equipment_widgets["NumOfStagesEntryCentComp"]=ttk.Entry(self.parent, textvariable=self.number_of_stages)
self.equipment_widgets["NumOfStagesEntryCentComp"].place(relx=0.5, y=290, anchor="center")
def OnTraceCentComp(self, varname, elementname, mode):
for key in self.check_box_dict:
self.check_box_dict[key].destroy()
try:
if self.number_of_stages.get() <=15 :
i=1
self.stagetempvar.clear()
while i <= self.number_of_stages.get():
self.stagetempvar[i]=tk.StringVar()
self.stagetempvar[i].set("Closed")
self.check_box_dict[i]=ttk.Checkbutton(self.parent, text=i, offvalue="Closed", onvalue="Open",variable=self.stagetempvar[i])
self.check_box_dict[i].place(relx=(i*(1/(self.number_of_stages.get()+1))), y=360, anchor="center")
i+=1
except:
pass
【问题讨论】:
-
您正在努力解决问题的哪一部分?你知道如何在python中做循环吗?你知道如何通过按钮调用函数吗?
-
我终于想通了。我在
ttk输入字段中引用的IntVar()上使用了trace()方法。 trace 回调方法然后销毁复选框对象的字典(如果有一些已经存在的话),然后进行一些条目验证,然后执行一个 while 循环。 -
您应该要求它立即发生在您的问题中。它可能会为一些人节省一些时间。
-
我说“一旦用户输入”,但我应该更具体。我认为这将是一个我忽略的简单解决方案。
-
我认为问题在于它的措辞方式,看起来问题是“我如何在循环中创建小部件”,而真正的问题是“我如何调用一个函数作为每个输入字符”。
标签: python python-2.7 tkinter