[英]destroying a label in different frame python tkinter
我試圖用 tkinter 制作一個應用程序,該應用程序在同一個 window 中顯示不同的幀,而你 go 用一個按鈕進入這些幀,我遇到了一個問題,當你點擊一個按鈕時,它應該做什么中間,即不可見的 label,如何將小部件更改為僅一幀,然后通過按鈕調用它並在 window 上更新該幀。 我希望我明確了我的任務,任何幫助都可以。 這是我的代碼
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() 時,它會保留該新行,並且在不應該出現時始終位於下一行。
“那是看不見的label”。 這是不正確的。 label 已被grid_forget()
刪除,它不僅不可見。 造成這種差距的原因是,一旦您刪除了小部件,框架就會保持其格式。
在切換 function 中,您使事情變得比它們需要的更復雜。 這里不需要多個真/假變量,您應該在框架上使用 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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.