使小部件在一个框架中消失

2024-10-02 00:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

import tkinter as tk
from tkinter import *

root= Tk()
root.title('Select State')
framey=Frame(root)
d_type = tk.StringVar()
d_type.set('1')
d1 = Radiobutton(root,  variable=d_type, text="Texas", value="Texas",command=lambda: cities(root))
d1.pack()
d2 = Radiobutton(root, variable=d_type, text="NJ", value="NJ",command=lambda: cities(root))
d2.pack()
def cities(root):
    texas= "Texas"
    nj ="NJ"
    state = d_type.get()
    if state== texas:
            f_band = tk.StringVar()
            f_band.set('Dallas')
            f1 = Radiobutton(framey,  variable=f_band, text="Dallas", value="Dallas")
            f1.pack()
            f2 = Radiobutton(framey,  variable=f_band, text="Houston", value="Houston")
            f2.pack()
    if state== nj:
            f_band = tk.StringVar()
            f_band.set('Newark')
            f1 = Radiobutton(framey,  variable=f_band, text="Newark", value="Newark")
            f1.pack()
            f2 = Radiobutton(framey,  variable= f_band, text="Princeton", value="Princeton")
            f2.pack()
    framey.pack()

我需要帮助找出如何使小部件消失。基本上,当按下一个州时,城市选项会弹出。但是-如果选择了其他状态,我希望这些选项消失。现在当德克萨斯州被按下时,休斯顿/达拉斯会弹出,但如果选择了新泽西州,它仍会停留在屏幕上。如果选择了另一个州,如何取消显示城市选项


Tags: textbandvaluetyperootvariablepacktk
1条回答
网友
1楼 · 发布于 2024-10-02 00:29:33

我也会把你的州/市从if-else中去掉,只需使用按钮为每个州调用一个函数,这样添加州就更容易了(至少在我看来更容易)。在每个状态回调的开始,我调用了frame clear。您还可以在clear函数中使用pack_forget()。我不确定这两种方法是否有好处,但我通常使用destroy(),因为destroy()较短,而且它不需要知道是使用grid()还是pack(),而且我通常会忘记pack/grid\u forget()中的“u”

from tkinter import *

def clearF(fr):
    frame = fr
    for item in frame.winfo_children():
        item.destroy()
        #item.pack_forget()
        #either destroy 

def citiesTX():
    clearF(framey)
    f_band.set('Dallas')
    f1 = Radiobutton(framey,  variable=f_band, text="Dallas", value="Dallas")
    f1.pack()
    f2 = Radiobutton(framey,  variable=f_band, text="Houston", value="Houston")
    f2.pack()

def citiesNJ():
    clearF(framey)
    f_band.set('Newark')
    f1 = Radiobutton(framey,  variable=f_band, text="Newark", value="Newark")
    f1.pack()
    f2 = Radiobutton(framey,  variable= f_band, text="Princeton", value="Princeton")
    f2.pack()

root= Tk()
root.title('Select State')
framey=Frame(root)
d_type = StringVar()
f_band = StringVar()
d_type.set('0')
d1 = Radiobutton(root,  variable=d_type, text="Texas", value="Texas", 
                 command= citiesTX)
d1.pack()
d2 = Radiobutton(root, variable=d_type, text="NJ", value="NJ", 
                 command= citiesNJ)
d2.pack()
framey.pack()

root.mainloop()

相关问题 更多 >

    热门问题