Выполнение команды из OptionMenu
Есть ли способ заставить меню опций выполнять команды из ряда различных команд?
from tkinter import *
#creates 2 windows
root = Tk()
popup = Toplevel()
#places frame in popup window
popup_frame = Frame(popup)
popup_frame.pack()
#4 functions, text is just placeholder for idea
def popup1(popup):
popup_frame.destroy()
popup_frame = Frame(popup)
label_popup1 = Label(popup_frame, text="unique textfor popup1")
popup_frame.pack()
label_popup1.pack()
def popup2(popup):
popup_frame.destroy()
popup_frame = Frame(popup)
label_popup2 = Label(popup_frame, text="unique text for popup2")
popup_frame.pack()
label_popup2.pack()
def popup3(popup):
popup_frame.destroy()
popup_frame = Frame(popup)
label_popup3 = Label(popup_frame, text="unique text for popup3")
popup_frame.pack()
label_popup3.pack()
def popup1(popup):
popup_frame.destroy()
popup_frame = Frame(popup)
label_popup4 = Label(popup_frame, text="unique text for popup4")
popup_frame.pack()
label_popup4.pack()
#2 option menus offering different selections
options1 = ["popup1", "popup2"]
variable1 = StringVar()
drop_title1 = StringVar(root)
#sets initial name for widget
drop_title1.set("Please Choose Options 1 Or 2")
dropdownmenu1 = OptionMenu(root, drop_title1, *options, command=lambda:func())
dropdownmenu1.place(x=10, y=10)
options2 = ["popup3", "popup4"]
variable2 = StringVar()
drop_title2 = StringVar(root)
drop_title2 .set("Please Choose Options 3 Or 4")
dropdownmenu2 = OptionMenu(root, drop_title2, *options, command=lambda:func())
dropdownmenu2.place(x=100, y=10)
root.mainloop()
Таким образом, есть корневой фрейм с двумя различными выпадающими меню, где, если вы нажмете, скажем, опцию 1, popup_frame будет удален и заменен содержимым опции 1, затем из второго выпадающего меню выбрана опция 4 и содержимое popup_frame изменить на какой вариант 4 содержит?
1 ответ
Решение
Функция определяется как command
для OptionMenu
будет выдано выбранное значение в качестве аргумента. Таким образом, вы можете определить функцию обратного вызова для проверки этого значения и вызова другой функции в зависимости от того, какое это значение:
from tkinter import *
#creates 2 windows
root = Tk()
popup = Toplevel()
#places frame in popup window
popup_frame = Frame(popup)
popup_frame.pack()
#4 functions, text is just placeholder for idea
def popup1():
global popup_frame
popup_frame.destroy()
popup_frame = Frame(popup)
label_popup1 = Label(popup_frame, text="unique text for popup1")
popup_frame.pack()
label_popup1.pack()
def popup2():
global popup_frame
popup_frame.destroy()
popup_frame = Frame(popup)
label_popup2 = Label(popup_frame, text="unique text for popup2")
popup_frame.pack()
label_popup2.pack()
def popup3():
global popup_frame
popup_frame.destroy()
popup_frame = Frame(popup)
label_popup3 = Label(popup_frame, text="unique text for popup3")
popup_frame.pack()
label_popup3.pack()
def popup4():
global popup_frame
popup_frame.destroy()
popup_frame = Frame(popup)
label_popup4 = Label(popup_frame, text="unique text for popup4")
popup_frame.pack()
label_popup4.pack()
def func(val):
if val == "popup1":
popup1()
elif val == "popup2":
popup2()
elif val == "popup3":
popup3()
elif val == "popup4":
popup4()
#2 option menus offering different selections
options1 = ["popup1", "popup2"]
variable1 = StringVar()
drop_title1 = StringVar(root)
#sets initial name for widget
drop_title1.set("Please Choose Options 1 Or 2")
dropdownmenu1 = OptionMenu(root, drop_title1, *options1, command=func)
dropdownmenu1.pack(side=LEFT)
options2 = ["popup3", "popup4"]
variable2 = StringVar()
drop_title2 = StringVar(root)
drop_title2 .set("Please Choose Options 3 Or 4")
dropdownmenu2 = OptionMenu(root, drop_title2, *options2, command=func)
dropdownmenu2.pack(side=LEFT)
root.mainloop()