正如标题所述,我在尝试传递两个参数给一个函数时遇到了问题,我希望在选项菜单更改时调用该函数。
以下是代码:
OPTIONS = [
"Fire",
"Ice",
"Storm",
"Life",
"Myth",
"Death",
"Balance"
]
var = StringVar(frame)
var.set("Select School") # initial value
option = OptionMenu(frame, var,*OPTIONS,command= lambda frame,var : changeSchool(frame,var))
option.grid(row=0,column=0,sticky=(N,W))
我做了一些研究,认为我已经正确操作了一切,但当我在选项菜单中选择一个选项时会出现以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Gunner\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1549, in __call__
return self.func(*args)
File "C:\Users\Gunner\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 3287, in __call__
self.__callback(self.__value, *args)
TypeError: <lambda>() missing 1 required positional argument: 'var'
我认为我已经在changeSchool函数中传入了变量。
非常感谢任何帮助!
编辑:以下是想要查看changeSchool函数的人们:
def changeSchool(frame,school):
print (school)
WizTool.schoolType = school
self.initBT(frame,WizTool.schoolType)
print (WizTool.schoolType)
编辑:这是整个程序(显示框架不在范围内的情况)
from tkinter import *
from tkinter import ttk
from functools import partial
import webbrowser
import pprint
class WizTool:
schoolType = "Fire"
#initialize the GUI
def __init__(self, master):
content = ttk.Frame(master, padding=(3,3,12,12))
frame = ttk.LabelFrame(content, borderwidth=5, relief="sunken", width=400, height=400,padding=(3,3,12,12),text = "Blade Tracker")
content.grid(column=0,row=0,sticky=(N,S,E,W))
frame.grid(column=0, row=0, columnspan=4, sticky=(N, S, E, W))
self.master = master
self.initUI(content)
self.initBT(frame,WizTool.schoolType)
def initUI(self,frame):
self.master.title("Bootstrapper")
def changeSchool(frame,school):
print (school)
WizTool.schoolType = school
self.initBT(frame,WizTool.schoolType)
print (WizTool.schoolType)
def initBT(self,frame,mySchool):
#option menu for selecting school
OPTIONS = [
"Fire",
"Ice",
"Storm",
"Life",
"Myth",
"Death",
"Balance"
]
var = StringVar(frame)
var.set("Select School") # initial value
option = OptionMenu(frame, var,*OPTIONS,command= lambda frame,var : changeSchool(frame,var))
option.grid(row=0,column=0,sticky=(N,W))
def main():
root = Tk()
root.geometry("800x500+300+300")
app = WizTool(root)
root.mainloop()
main()