簡體   English   中英

使用Tkinter事件更改標簽的外觀

[英]Change the appearance of labels with Tkinter events

語境:我沒事的Python,但還不熟悉它的所有功能。

我正在嘗試使用Tkinter構建GUI,並且想知道是否可以發生這種情況:如果選擇了單選按鈕,則五個標簽之一將消失。 如果按下另一個單選按鈕,則將顯示隱藏的標簽,並且另一個標簽將消失。

from Tkinter import *
root = Tk()

v = IntVar()
v.set(0)


physVar = (
    ("a", 1),
    ("vi", 2),
    ("vf", 3),
    ("t", 4),
    ("x", 5)
    )


def ShowChoice():
    print physVar[v.get()-1][0]


Label(root, 
    text="Solve for:",
    padx = 5
    ).grid(row=0, column=0, columnspan = 6)

for txt, val in physVar:
    Radiobutton(root,
    text= txt,
    variable = v,
    command=ShowChoice,
    value=val).grid(row=1, column = val)


for txt, val in physVar:
    Label(root,
        text=txt).grid(column = 0, row = val+1)

for txt, val in physVar:
    Entry(root,
        text=txt).grid(column = 1, columnspan = 5, row = val +1)
mainloop()

例如,如果我單擊“ a”單選按鈕,則標簽“ a”及其旁邊的條目將消失。

編輯:我可能還會包括我要構建的內容:一個像這樣的運動方程式求解計算器-http://planetcalc.com/981/

好了,您已經有一個功能在更改Radiobutton按鈕時運行,因此很顯然,這是需要編寫代碼的地方。

要更改有關小部件的任何內容,您需要保留對它們的引用,並且由於使它們處於循環狀態,因此建議您將這些引用放在列表中。 由於grid返回None ,因此您還需要區分窗口小部件的構造和grid調用。

然后,您可以使用grid_remove()從窗口中刪除小部件,同時記住它們的放置位置。 然后,您可以將此grid_remove調用放入grid_remove按鈕時運行的函數中,而僅使用grid()放回其他函數。 由於您不知道上一次刪除了哪個小部件,因此可以在刪除所有需要的小部件之前重新柵格化所有小部件。 我還刪除了第一個EntryLabel因為自動選擇了Radiobutton a

當你的一個類型的東西Entry框,然后選擇Radiobutton ,消除它,然后再次彼此,你可以看到小部件從來沒有真正摧毀,但與電網只是刪除,因為它的文本仍然存在。

請參閱以下示例:

from Tkinter import *
root = Tk()

v = IntVar()
v.set(0)

physVar = (("a", 0), ("vi", 1), ("vf", 2), ("t", 3), ("x", 4))

def change_radio():
    for i in range(5):
        e[i].grid()
        l[i].grid()
    e[v.get()].grid_remove()
    l[v.get()].grid_remove()

Label(root, text="Solve for:", padx=5).grid(row=0, column=0, columnspan=6)

r=[]
for txt, val in physVar:
    r.append(Radiobutton(root, text= txt, variable = v, command=change_radio, value=val))
    r[-1].grid(row=1, column=val+1)

l=[]
for txt, val in physVar:
    l.append(Label(root, text=txt))
    l[val].grid(column=0, row=val+2)

e=[]
for txt, val in physVar:
    e.append(Entry(root,text=txt))
    e[val].grid(column=1, columnspan=5, row=val+2)

e[0].grid_remove()
l[0].grid_remove()

root.grid_columnconfigure(1, minsize=4)
root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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