选择不同的单选按钮时,如何去除第一个单选按钮的效果?

How can I remove the effect of the first Radiobutton when selecting different Radiobutton?

我想为我的代码组织 GUI,它有 2 个部分。 I'm organizing it by adding Radiobuttons, where when one is selected, it displays "Section 1" only. And when the other Radiobutton is selected, it should undisplay "Section 1", and display only "Section 2".

这就是想法,一切顺利,只是如果我更改 Radiobutton 选择,它会显示两个部分。

如何让它一次只显示一个?

这是一个示例代码,可以是运行:

from tkinter import *

def main():
    root = Tk()
    app = Window(root)
    root.mainloop()


class Window():
    def __init__(self, master):
        self.master=master
        self.master.title("Test")
        self.master.geometry('1000x700')

        self.Radio=Label (self.master, text="Select Method", bg='Lavender')
        self.RadioFrame=LabelFrame(self.master, width=230, height=150, labelwidget=self.Radio, bg='lavender')
        self.RadioFrame.place(x=200, y=35)

        selection = IntVar()
        selection.set(0)
        r1 = Radiobutton(self.RadioFrame, text="Option 1", variable=selection, value=1, command=lambda: Clicked(selection.get()), bg='lavender').pack()
        r2 = Radiobutton(self.RadioFrame, text="Option 2", variable=selection, value=2, command=lambda: Clicked(selection.get()), bg='lavender').pack()

        def Clicked(variable):

            if selection.get() ==1:
                self.label_1=Label (self.master, text="label 1", bg='lavender')
                self.label_1Frame=LabelFrame(self.master, width=230, height=90, labelwidget= self.label_1, bg='lavender')
                self.label_1Frame.place(x=490, y=35)

            elif selection.get() ==2:
                self.label_2=Label (self.master, text="label_2", bg='lavender')
                self.label_2Frame=LabelFrame(self.master, width=230, height=60, labelwidget= self.label_2, bg='lavender')
                self.label_2Frame.place(x=490, y=340)

#root.mainloop()
if __name__=='__main__':
    main()

你可以这样使用:

try:
    self.any_widget.destroy()
except AttributeError:
    pass

销毁任何小部件。
所以,我已经更正了你的代码:

from tkinter import *  

def main():    
    root = Tk()
    app = Window(root)
    root.mainloop()


class Window():
    def __init__(self, master):
        self.master=master
        self.master.title("Test")
        self.master.geometry('1000x700')

        self.Radio=Label (self.master, text="Select Method", bg='Lavender')
        self.RadioFrame=LabelFrame(self.master, width=230, height=150, labelwidget=self.Radio, bg='lavender')
        self.RadioFrame.place(x=200, y=35)

        selection = IntVar()
        selection.set(0)
        r1 = Radiobutton(self.RadioFrame, text="Option 1", variable=selection, value=1, command=lambda: Clicked(selection.get()), bg='lavender').pack()
        r2 = Radiobutton(self.RadioFrame, text="Option 2", variable=selection, value=2, command=lambda: Clicked(selection.get()), bg='lavender').pack()

        def Clicked(variable):
    
            if selection.get() ==1: 
                self.label_1=Label (self.master, text="label 1", bg='lavender')
                self.label_1Frame=LabelFrame(self.master, width=230, height=90, labelwidget= self.label_1, bg='lavender')
                self.label_1Frame.place(x=490, y=35)
                try:
                    self.label_2Frame.destroy()
                except AttributeError:
                    pass

            elif selection.get() ==2:
                self.label_2=Label (self.master, text="label_2", bg='lavender')
                self.label_2Frame=LabelFrame(self.master, width=230, height=60, labelwidget= self.label_2, bg='lavender')
                self.label_2Frame.place(x=490, y=340)
                try:
                    self.label_1Frame.destroy()
                except AttributeError:
                    pass

#root.mainloop()
if __name__=='__main__':
    main()

试试这个。

单击单选按钮时,您创建了新的 LabelFrame。您应该先创建两个标签框而不显示它们,然后根据单选按钮的选择显示一个标签框:

class Window():
    def __init__(self, master):
        self.master=master
        self.master.title("Test")
        self.master.geometry('1000x700')

        self.Radio=Label (self.master, text="Select Method", bg='Lavender')
        self.RadioFrame=LabelFrame(self.master, width=230, height=150, labelwidget=self.Radio, bg='lavender')
        self.RadioFrame.place(x=200, y=35)

        selection = IntVar()
        selection.set(0)
        r1 = Radiobutton(self.RadioFrame, text="Option 1", variable=selection, value=1, command=lambda: Clicked(selection.get()), bg='lavender').pack()
        r2 = Radiobutton(self.RadioFrame, text="Option 2", variable=selection, value=2, command=lambda: Clicked(selection.get()), bg='lavender').pack()

        # create the two label frames without showing them
        self.label_1=Label (self.master, text="label 1", bg='lavender')
        self.label_1Frame=LabelFrame(self.master, width=230, height=90, labelwidget= self.label_1, bg='lavender')

        self.label_2=Label (self.master, text="label_2", bg='lavender')
        self.label_2Frame=LabelFrame(self.master, width=230, height=60, labelwidget= self.label_2, bg='lavender')

        def Clicked(selected):

            if selected ==1:
                self.label_1Frame.place(x=490, y=35) # show label frame 1
                self.label_2Frame.place_forget() # hide label frame 2

            elif selected ==2:
                self.label_1Frame.place_forget() # hide label frame 1
                self.label_2Frame.place(x=490, y=340) # show label frame 2