cara menonaktifkan dua tombol radio lainnya yang mengikat bingkainya sendiri di tkinter

Saya merancang GUI dengan tkinter. Ada tiga tombol radio yang terikat pada masing-masing frame. Apakah ini cara untuk menonaktifkan dua tombol radio lainnya dengan mengklik salah satunya? Atau lebih baik lagi menonaktifkan dua frame lainnyamasukkan deskripsi gambar di sini

Saya tidak dapat mencapai fitur ini. Di bawah ini adalah bagian dari kode. Tolong beri tahu saya jika Anda memerlukan informasi lebih lanjut. Terima kasih

root = Tk()
root.title("MyApp")   

f1 = ttk.Frame(root, padding="3 3 12 12")
f1.grid(row=0, sticky=(W, E, N, S))
Label(f1, text = "Welcome to My App!", font=("Times New Roman", 20)).grid(column=3, row=1, sticky='EW')  


root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)

option = StringVar()

topframe=ttk.Frame(root, padding="3 3 12 12", relief = GROOVE, borderwidth = 10)
topframe.grid(row=1, sticky=(W, E, N, S))

mainframe = ttk.Frame(root, padding="3 3 12 12",  relief = GROOVE, borderwidth = 10)
mainframe.grid(row=2, sticky=(W, E, N, S))

bottomframe = ttk.Frame(root, padding="3 3 12 12", relief = GROOVE, borderwidth = 10)
bottomframe.grid(row=3, sticky=(W, E, N, S))

paraframe = ttk.Frame(root, padding="3 3 12 12" , relief = GROOVE, borderwidth = 10)
paraframe.grid(row=4, sticky=(W, E, N, S))



rb1 = Radiobutton(topframe, text="Select Files", value="files", var=option)
rb1.grid(column=0, columnspan=2, row=0, sticky=W)

rb2 = Radiobutton(mainframe, text="Select a Directory", value="directory", var=option)
rb2.grid(column=0,columnspan=2, row=0,sticky=W)

rb3 = Radiobutton(bottomframe, text="Paste a JSON File", value="json", var=option)
rb3.grid(column=0,columnspan=2, row=0,sticky=W)

# function to gray out
def greyOutNotTop():
    if option.get() == "files":
        rb2.config(state='disable')
        rb3.config(state='disable')

def greyOutNotMain():
    if option.get() == "directory":
        rb1.config(state='disable')
        rb3.config(state='disable')
def greyOutNotBottom():
    if option.get() == "json":
        rb1.config(state='disable')
        rb2.config(state='disable')

root.mainloop()

person Jason Li    schedule 21.06.2019    source sumber
comment
kemungkinan duplikat stackoverflow.com/ pertanyaan/49061602/   -  person Anubhav Singh    schedule 21.06.2019
comment
Saya mencoba menonaktifkan anak-anak dari dua frame lainnya. misalnya jika saya memilih rb1, maka nonaktifkan semua turunan mainframe dan bottomframe. Cobalah untuk memanggil fungsi dari setiap Label, Entri dan tombol yang terkait dengan dua frame ini. Sayangnya, saya gagal membuatnya berfungsi. untuk anak di mainframe.winfo_children(): child.config (status = dinonaktifkan)   -  person Jason Li    schedule 22.06.2019


Jawaban (1)


Ya, Anda bisa, seperti ini:

def greyOutNotTop():
    rb2.config(state='disable')
    rb3.config(state='disable')

rb1 = Radiobutton(topframe, text="Select Files", value="files", var=option, command =greyOutNotTop)
rb1.grid(column=0, columnspan=2, row=0, sticky=W)

Tapi ada masalah besar dengan hal itu. Jika Anda menonaktifkan 2 tombol radio lainnya, pengguna tidak dapat mengkliknya lagi. Jadi dengan klik pertama mereka berkomitmen.

Anda perlu memikirkan kembali desain Anda. Saya pikir ttk.Notebook akan lebih masuk akal di sini.

person Novel    schedule 21.06.2019
comment
Saya berencana menambahkan widget lain yang dapat mengaktifkan (reset) ketiga tombol radio. Ini adalah rencanaku dan aku belum mengerjakannya. - person Jason Li; 22.06.2019