所以我现在用tkinter创建一个GUI应用程序,无论我放在最上面的框中,GUI都会自动添加另一个entry row
当我把1,然后我尝试更大的数字,如3或5它工作得很好,入口行将出现,问题是每当我把数字如5和尝试把数字小于5,该条目仍将显示而不是 removed
有什么办法可以当我输入更大的数字如4并且后跟较少的数字如2而且,5中的条目将被删除?
编辑:添加代码
def choiceone(self):
self.labeln1 = ttk.Label(self, text="1", justify="center")
self.labeln1.grid(row=7, column=1)
self.entry1 = ttk.Entry(self, width=15)
self.entry1.grid(row=7, column=2)
self.entry2 = ttk.Entry(self, width=15)
self.entry2.grid(row=7, column=3)
self.entry3 = ttk.Entry(self, width=15)
self.entry3.grid(row=7, column=4)
self.entry4 = ttk.Entry(self, width=15)
self.entry4.grid(row=7, column=5)
def choicetwo(self):
self.labeln2 = ttk.Label(self, text="2", justify="center")
self.labeln2.grid(row=9, column=1)
self.entry5 = ttk.Entry(self, width=15)
self.entry5.grid(row=9, column=2)
self.entry6 = ttk.Entry(self, width=15)
self.entry6.grid(row=9, column=3)
self.entry7 = ttk.Entry(self, width=15)
self.entry7.grid(row=9, column=4)
self.entry8 = ttk.Entry(self, width=15)
self.entry8.grid(row=9, column=5)
def choicethree(self):
self.labeln3 = ttk.Label(self, text="3", justify="center")
self.labeln3.grid(row=11, column=1)
self.entry9 = ttk.Entry(self, width=15)
self.entry9.grid(row=11, column=2)
self.entry10 = ttk.Entry(self, width=15)
self.entry10.grid(row=11, column=3)
self.entry11 = ttk.Entry(self, width=15)
self.entry11.grid(row=11, column=4)
self.entry12 = ttk.Entry(self, width=15)
self.entry12.grid(row=11, column=5)
class MultiLevel(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = ttk.Label(self, text="Fatigue Failure", font=LARGE_FONT)
label.grid(columnspan=3, sticky="w")
labele1 = ttk.Label(self, text="METHOD 1", font=LARGE_FONT)
labele1.grid(row=1, column=1)
ttk.Separator(self, orient=tk.HORIZONTAL).grid(row=2, columnspan=5, sticky="EW")
labele0 = ttk.Label(self, text="")
labele0.grid(row=3, column=1)
label0 = ttk.Label(self, text="Number of \nStress Level: ", font=MEDIUM_FONT, justify="center")
label0.grid(row=4, column=1)
self.entry0 = ttk.Entry(self, width=15)
self.entry0.grid(row=4, column=2)
button0 = ttk.Button(self, text="OK ", command=lambda: self.ok())
button0.grid(row=4, column=3)
def ok(self):
try:
float(self.entry0.get())
except ValueError:
errormsg("INPUT YOUR NUMBER")
else:
if float(self.entry0.get()) == 1:
choiceone(self)
elif float(self.entry0.get()) == 2:
choiceone(self)
choicetwo(self)
elif float(self.entry0.get()) == 3:
choiceone(self)
choicetwo(self)
choicethree(self)
答案 0 :(得分:1)
每次你把numer总是在网格中创建新的条目,但你永远不会删除以前的条目,所以不要期望它们会神奇地消失。
您必须使用grid_forget()
隐藏窗口小部件(但不能从内存中删除),或grid_remove()
从网格和内存中删除。
现在,当你输入1然后你在第一行创建条目,当你输入3时,你在第一行再次创建条目,所以你在第一行的每个单元格中有两个条目 - 一个在另一个之上 - 之前的条目不是t消失了。
顺便说一句:如果您将条目保留在列表中self.entries[0]
,self.entries[1]
等,或者作为二维列表self.entries[row][col]
,则可能会更容易。
答案 1 :(得分:0)
正如@furas所说,你需要先破坏现有的小部件:
def ok(self):
try:
float(self.entry0.get())
except ValueError:
errormsg("INPUT YOUR NUMBER")
else:
# remove existing widgets start from row 7
for widget in self.grid_slaves():
if int(widget.grid_info()["row"]) >= 7:
widget.destroy()
if float(self.entry0.get()) == 1:
choiceone(self)
...
PS:从您的代码开始,关注小部件放在第7行及以上。
建议基于您的代码,但我认为您最好重构代码。