我想為我的代碼組織 GUI,它有 2 個部分。I'm organizing it by adding Radiobuttons, where when one is selected, it displays "Section 1" only. 當另一個Radiobutton被選中時,它應該不顯示“Section 1”,只顯示“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()
uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
你可以使用這樣的東西:
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()
試試這個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/369270.html
下一篇:計算器不總結總數
