所以正如标题所示,当选项菜单更改时,我很难将2个参数传递给我想调用的函数。在
代码如下:
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))
我做了一些研究,我认为我做的一切都是正确的,但是当我在选项菜单中选择一个选项时,我得到了以下错误:
^{pr2}$我想我已经把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()
OptionMenu
小部件的command
函数只接受一个参数:selected item
。在command
函数吗?回答:没有command
函数?答案:Python。在Python将您指定的函数存储在某个地方,然后在将来的某个时候,在options菜单中进行选择之后,Python调用
command
函数。因此python决定它将传递给command
函数的参数数量,结果是python使用一个参数调用command
函数:你怎么知道python用一个参数调用
command
函数?回答:你检查文件。如果在文档中找不到描述您需要分配给
command
的函数类型的任何内容,会发生什么情况?回答:你来测试一下。第一个:
^{pr2}$下一步:
有很多方法可以解决这个问题。。。在
使用python的作用域规则:
但是让函数操作全局变量并不是一个好主意,所以你可以。。。在
使用包装函数:
使用额外参数变量的默认值:
警告:参数变量的默认值有自己的问题。定义函数时,默认值被赋值一次。随后,无论执行函数多少次,默认值都使用相同的值。这意味着,如果默认值是一个列表,并且第一次调用函数时更改了该列表,那么下次调用该函数时,默认值将是更改后的列表。在
相关问题 更多 >
编程相关推荐