我在如何在OptionMenu的某些状态下运行某些代码时遇到问题。
from tkinter import *
class Browser(Frame):
def __init__(self, root):
self.root = root
super().__init__(self.root)
self.createUtility()
return
def createUtility(self):
self.main_frame = Frame(bg="")
self.main_frame.grid(row=0, column=0)
self.display_frame = Frame(width=50, height=50, bg="")
self.display_frame.grid(row=1, column=0)
options = ["Plants", "Wood", "Mushrooms", "Animals"]
self.variable = StringVar()
self.variable.set("Wood")
self.change_menu = OptionMenu(self.main_frame, self.variable, *options, command=self.func)
self.change_menu.grid(row=0, column=0)
self.exit_button = Button(self.display_frame, text="Quit!", command=quit)
self.exit_button.grid(row=1, column=1)
if value == "Plants":
#do some code
elif value == "Wood":
#do some code
elif value == "Mushrooms":
#do some code
elif value == "Animals":
#do some code
else:
#do some code
return
def func(self, value):
return value
#This value should be used for an if block in createUtility function
if __name__ == "__main__":
b = Browser(Tk())
mainloop()
我没有收到错误,所以很好。我可以在OptionMenu中单击并选择选项,但是什么也没发生。
答案 0 :(得分:0)
首先,我想说的是默认情况下未收到错误并不表示“好”。没有错误但仍然有问题的原因可能很多。
现在进入代码本身。你有一些问题。
您的方法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()