Я пытаюсь создать раскрывающееся меню Tkinter, чтобы добавить его в основной GUI. Назначение меню - предоставить пользователю несколько вариантов выбора нейронной сети сегментации изображений (в настоящее время их всего два).
Мне не удается получить значение раскрывающегося меню и проанализировать его с помощью функции в качестве параметра (переменной, а не строки).
Я попытался создать staticmethod
в GUI класс окна для поиска значения в раскрывающемся меню и анализа значения с помощью функции сегментации изображения при нажатии кнопки сегмента в GUI. Функция сегментации принимает два параметра, net
и path
, где это нейронная сеть и путь к файлу изображения соответственно.
Я не совсем уверен, как изменить отдельные параметры переменной, поэтому я просто изменил всю переменную в зависимости от значения раскрывающегося меню. Единственное, что изменилось, - это параметр net
функции сегмента, привязанный к кнопке Tkinter.
Код:
@staticmethod
def find_option():
if menu1.get() == "fcn":
App.btn2 = Button(App.btn_frame, text="Segment", width = 10, height = 1, cursor = "hand2", command=lambda: App.segment(net=App.fcn, path=App.path))
else:
App.btn2 = btn2 = Button(App.btn_frame, text="Segment", width = 10, height = 1, cursor = "hand2", command=lambda: App.segment(net=App.dlab, path=App.path))
Код выпадающего меню:
fcn = models.segmentation.fcn_resnet101(pretrained=True).eval()
dlab = models.segmentation.deeplabv3_resnet101(pretrained=1).eval()
options = ["fcn", "dlab"]
variable = StringVar(btn_frame)
variable.set(options[0]) # default value
menu1 = OptionMenu(btn_frame, variable, *options)
menu1.pack(side=LEFT)
btn_frame
- фрейм в главном окне, содержащий кнопки.
App
- основной класс GUI. На menu1
нужно было ссылаться как на App.menu1
, но это по какой-то причине вызвало бы несколько ошибок (другие переменные класса стали бы undefined
, а было бы App object has no attribute menu
). Я также пробовал ссылаться на menu1
как на App().menu1
, но каждый раз, когда я нажимал кнопку сегмента, открывал новое окно, а также никогда не показывал сегментированное изображение.