วิธีปิดการใช้งานปุ่มเรดิโออีกสองปุ่มที่ผูกกับเฟรมของตัวเองใน tkinter

ฉันกำลังออกแบบ GUI ด้วย 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 (state =disabled)   -  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