【问题标题】:Making Widgets Disappear in a Frame使小部件消失在框架中
【发布时间】:2020-01-16 16:18:34
【问题描述】:
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()

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

【问题讨论】:

  • 您可以先删除framey的所有子级,然后创建所需的单选按钮。
  • @acw1668 我应该在每个 if 语句之后执行吗?
  • 不,在 if 语句之前。
  • @ClaudiaBesse JohnT 给出的答案将解决您的问题。如果您不明白这一点,那么我也有一个答案可以解决您的问题,而无需对您的代码进行太多更改。我还没有发布它,因为 John T 已经发布了答案,它也解决了您代码中的其他问题。就像在您的代码中有时 Radiobutton 会闪烁等。而我所拥有的解决方案只会解决您所说的问题。

标签: python tkinter widget


【解决方案1】:

我还会将您的州/城市从 if-else 中删除,然后使用按钮为每个州调用一个函数,以这种方式添加状态更容易(至少在我看来更容易)。在每个状态回调开始时,我都会调用 frame clear。您也可以在 clear 函数中使用 pack_forget()。我不确定对任何一个都有好处,但我通常使用 destroy() 因为它更短,并且不需要知道事物是 grid()ed 还是 pack()ed,而且我通常会忘记 '_ ' 在 pack/grid_forget() 中。

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 2019-06-27
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多