Сначала я хочу сказать, что отсутствие ошибки по умолчанию не означает «хорошо».Там может быть много причин, чтобы не получить ошибку и все еще иметь проблемы.
Теперь переходим к самому коду.У вас есть несколько проблем.
Ваш метод func
здесь не делает ничего полезного.Возврат события назад к пункту меню ничего не даст, так как он игнорируется OptionMenu
.Так что здесь вы не получите никакой ошибки, потому что она игнорируется.
Ваш оператор if/elif
будет выполнен только один раз и должен завершиться ошибкой: NameError: name 'value' is not defined
.Из-за того, что значение никогда не определяется в методе createUtility
.
Использование return
не требуется ни в одном из этих мест и фактически ничего полезного не дает.
b = Browser(Tk()) mainloop()
Не очень хороший подход.Вы должны быть более точными в своем экземпляре tkinter.
Небольшая жалоба, но стоит упомянуть.Вместо from tkinter import *
вы должны сделать import tkinter as tk
и использовать префикс tk.
там, где это необходимо.Это поможет предотвратить случайное перенапряжение импорта формы tkinter.
Измените его на что-то вроде этого:
if __name__ == "__main__":
root = Tk()
Browser(root)
root.mainloop()
Код:
import tkinter as tk
class Browser(tk.Frame):
def __init__(self, root):
super().__init__(root)
main_frame = tk.Frame(bg="")
display_frame = tk.Frame(width=50, height=50, bg="")
main_frame.grid(row=0, column=0)
display_frame.grid(row=1, column=0)
options = ["Plants", "Wood", "Mushrooms", "Animals"]
self.variable = tk.StringVar()
self.variable.set("Wood")
self.change_menu = tk.OptionMenu(main_frame, self.variable, *options, command=self.check_value)
self.exit_button = tk.Button(display_frame, text="Quit!", command=quit)
self.change_menu.grid(row=0, column=0)
self.exit_button.grid(row=1, column=1)
def check_value(self, event):
if event == "Plants":
print(event)
elif event == "Wood":
print(event)
elif event == "Mushrooms":
print(event)
elif event == "Animals":
print(event)
else:
print("No match")
if __name__ == "__main__":
root = tk.Tk()
Browser(root)
root.mainloop()