我试图用tkinter制作一个在同一窗口中显示不同框架的应用程序,然后用一个按钮进入这些框架,我遇到了一个问题,当您单击该按钮时,它会做应该做的事情,但是在其中存在空白中间是不可见的标签,我该如何将小部件更改为仅一帧,然后通过按钮调用它并在窗口上更新该帧。我希望我能明确我的任务,任何帮助都可以。这是我的代码
import tkinter as tk
app = tk.Tk()
app1 = tk.Frame(app)
app1.grid()
app2 = tk.Frame(app)
app2.grid()
app3 = tk.Frame(app)
app3.grid()
text1 = tk.Label(app1, text="Home")
text1.grid()
text2 = tk.Label(app2, text="Home2")
app3.test = True
app3_label = tk.Label(app3, text="app3")
app3_label.grid()
app4 = tk.Frame(app)
app4.test = False
app4_label = tk.Label(app4, text="app4")
app4_label.grid()
def toggle():
if(app3.test):
app3.test = False
app3.grid_forget()
app4.test = True
app4.grid()
text2.grid()
else:
app4.test = False
app4.grid_forget()
app3.test = True
app3.grid()
text2.grid_forget()
button1 = tk.Button(app1, text="click", command=toggle)
button1.grid(row=0, column=2)
app.mainloop()
您使用不grid()
正确。如果您希望事情始终保持正确的顺序,则网格需要知道行和列。无需提供grid()
行/列,它将仅适用于下一个可用行。然后,当您使用grid_forget()然后再次使用grid()时,它将保留该新行,并且在不应该保留时始终位于下一行。
“那是不可见的标签”。这是不正确的。标签已被删除,grid_forget()
不仅不可见。造成这种差距的原因是,一旦您删除了小部件,框架便保持其格式。
您使事情变得比在切换功能中所需的事情更加复杂。这里不需要多个true / false变量,您应该在框架上使用grid_forget()而不是框架中的小部件。
尝试以下方法:
import tkinter as tk
app = tk.Tk()
toggle = False
app1 = tk.Frame(app)
app2 = tk.Frame(app)
app3 = tk.Frame(app)
app4 = tk.Frame(app)
app1.grid()
app2.grid()
app3.grid()
tk.Label(app1, text="Home").grid()
tk.Label(app2, text="Home2").grid()
tk.Label(app3, text="app3").grid()
tk.Label(app4, text="app4").grid()
def toggle():
global toggle
if toggle:
app3.grid_forget()
app4.grid()
toggle = False
else:
app4.grid_forget()
app3.grid()
toggle = True
tk.Button(app1, text="click", command=toggle).grid(row=0, column=2)
app.mainloop()
如果您正在寻找一种更动态的方法来处理许多帧,则可以使用列表保存所有帧,然后在该列表上进行迭代。
import tkinter as tk
app = tk.Tk()
frame_list = []
frame_ndex = 0
for i in range(4):
frame_list.append(tk.Frame(app))
tk.Label(frame_list[-1], text='Frame {}'.format(i+1)).grid(row=1, column=0)
frame_list[frame_ndex].grid(row=1, column=0)
def toggle():
global frame_ndex
frame_list[frame_ndex].grid_forget()
if frame_ndex+1 == len(frame_list):
frame_ndex = 0
frame_list[frame_ndex].grid(row=1, column=0)
else:
frame_ndex += 1
frame_list[frame_ndex].grid(row=1, column=0)
tk.Button(app, text="click", command=toggle).grid(row=0, column=0)
app.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句