как отключить две другие радиокнопки, которые привязываются к собственному фрейму в tkinter

Я разрабатываю графический интерфейс с помощью tkinter. К каждому отдельному кадру привязаны три переключателя. Это способ отключить два других переключателя, щелкнув один из них? Или еще лучше отключить два других фреймавведите здесь описание изображения

Я не могу достичь этой функции. Ниже часть кода. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Спасибо

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 источник
comment
возможный дубликат stackoverflow.com/ вопросы/49061602/   -  person Anubhav Singh    schedule 21.06.2019
comment
Я попытался отключить дочерние элементы двух других фреймов. например, если я выберу rb1, то отключу все дочерние элементы мейнфрейма и нижнего фрейма. Попробуйте вызвать функцию из каждой метки, записи и кнопки, связанных с этими двумя кадрами. К сожалению, мне не удалось заставить их работать. для дочернего элемента в mainframe.winfo_children(): child.config (состояние = отключено)   -  person Jason Li    schedule 22.06.2019


Ответы (1)


Да, можно, вот так:

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)

Но с этим есть огромная проблема. Если вы отключите 2 других радиокнопки, пользователь больше не сможет нажимать на них. Таким образом, с первого щелчка они фиксируются.

Вам нужно переосмыслить свой дизайн. Я думаю, что ttk.Notebook здесь будет иметь больше смысла.

person Novel    schedule 21.06.2019
comment
Я планирую добавить еще один виджет, который может включать (сбрасывать) все три переключателя. Это мой план, и я еще не работал над ним. - person Jason Li; 22.06.2019