如何杀死/禁用我们在Python-Tkinter中单击RadioButton时启动的命令/功能?

时间:2016-03-08 04:49:11

标签: python tkinter

  1. 我很擅长使用Python-Tkinter。
  2. 我正在尝试创建一个框架工作,根据一些用户输入,小部件需要更改。
  3. 例如,首先,它要求用户选择option1或option2。
  4. 如果选择了option1,则应执行命令/功能。同样,如果选择选项2,则不同的功能应该起作用。
  5. 同样,如果我在option1和option2之间切换,则函数/命令应相应地更改/禁用。
  6. 下面是我尝试过的一段代码,但是当我选择option1时,它会执行option1命令/功能。
  7. 然后当我选择option2时,option1命令仍然存在并且option2命令打开。
  8. 如果我进一步切换,所有窗口都会不断添加到上一个窗口。
  9. 如何根据单选按钮的选择基本禁用/终止选项?
  10. 代码:

    from Tkinter import *
    
    root = Tk()
    v = IntVar()
    
    frame = Frame(root)
    frame.pack()
    
    Label(root, 
          text="What You Want To Create: ",
          justify = LEFT, 
          padx = 0).pack()
    
    
    def enableEntryComObjName():
        entry = Entry()
        entry.pack(side='bottom')
        entry.configure(state="normal")    
        entry.update()
    
    def singlecomponent():
        #selection = "Which Single Component/Object You Wanted To Create: "
        #label.config(text = selection)
        Label(root, 
              text="Which Single Component/Object You Wanted To Create: ",
              justify = LEFT, 
              padx = 0).pack()
        Radiobutton(
                    text="Transaction Object",
                    padx= 20,
                    variable=v,
                    value=1).pack(anchor=W)
        #selection = "Enter The Component/Object Name You Wanted To Create: "
        #label.config(text = selection)
        Label(root, 
              text="Enter The Component/Object Name You Wanted To Create: ",
              justify = LEFT, 
              padx = 0).pack()
        enableEntryComObjName()
    
    def completecomponent():
        Label(root, 
              text="How Many Boxes You Want To Create: ",
              justify = LEFT, 
              padx = 0).pack()
        enableEntryComObjName()
        Label(root, 
              text="What Type Of Interface You Wanted To Create: ",
              justify = LEFT, 
              padx = 0).pack()
        Radiobutton(root,
                text="Default Interface",
                padx= 20,
                variable=v,
                value=1,
                command=singlecomponent).pack(anchor=W)
        Radiobutton(root,
                text="User Defined Interface",
                padx = 20,
                variable=v,
                value=2,
                command=completevip).pack(anchor=W)
    
    
    Radiobutton(root,
                text="Single Component",
                padx= 20,
                variable=v,
                value=1,
                command=singlecomponent).pack(anchor=W)
    Radiobutton(root,
                text="Complete Component",
                padx = 20,
                variable=v,
                value=2,
                command=completecomponent).pack(anchor=W)
    
    label = Label(root)
    label.pack()
    mainloop()
    

    请帮助我。

    谢谢&问候,
    Vimo

1 个答案:

答案 0 :(得分:0)

您需要保存小部件引用,并在需要时使用pack_forget()隐藏它们。

如果选择option1,则隐藏option2显示的小部件。同样,如果选择option2,则隐藏option1显示的小部件。

您可以将小部件引用保存在列表中或使用变量名称。

这是一个基本的例子:

from Tkinter import *

root = Tk()
v = IntVar()

group1 = []
group2 = []

group1.append( Entry(root) )
group1[0].insert(0, "Entry1")

group1.append( Button(root, text='Button1') )

group2.append( Entry(root) )
group2[0].insert(0, "Entry2")
group2.append( Button(root, text='Button2') )

def show1():

    for w in group2:
        w.pack_forget()

    for w in group1:
        w.pack()

def show2():
    for w in group1:
        w.pack_forget()

    for w in group2:
        w.pack()

Radiobutton(root,
            text="Single Component",
            padx= 20,
            variable=v,
            value=1,
            command=show1).pack(anchor=W)
Radiobutton(root,
            text="Complete Component",
            padx = 20,
            variable=v,
            value=2,
            command=show2).pack(anchor=W)

mainloop()