簡體   English   中英

在不同的框架 python tkinter 中銷毀 label

[英]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()
  1. 您沒有正確使用grid() 如果您希望事情始終處於正確的順序,網格需要知道行和列。 如果不為grid()提供行/列,它將僅應用於下一個可用行。 然后,當您使用 grid_forget() 然后再次使用 grid() 時,它會保留該新行,並且在不應該出現時始終位於下一行。

  2. “那是看不見的label”。 這是不正確的。 label 已被grid_forget()刪除,它不僅不可見。 造成這種差距的原因是,一旦您刪除了小部件,框架就會保持其格式。

  3. 在切換 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM