在 Python 3 和 tkinter 中使用变量调用函数
Using a variable to call a function in Python 3 and tkinter
我有几个不同的函数要调用,但我想使用变量的值来调用。我在 tkinter 中使用按钮来更改变量的值,以及一个选择随机变量的按钮和一个显示当前值的标签(我在下面的代码中省略了它)。我有另一个创建 AskYesNo 消息框的按钮,以从用户处确认所选择的 button/variable 值是正确的。如果用户选择否,它 returns 到根 window。如果用户选择是,我希望程序调用与变量关联的函数。
我是 Python 和 tkinter 的初学者,所以请不要假设我对简单的编码一无所知。谢谢
请参阅下面的一些示例代码:
import random
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
root = Tk()
global tempchoice
global foo
tempchoice = StringVar()
item = StringVar()
def afunc():
foo.set('A')
tempchoice.set('afuncaction')
return()
def afuncaction():
print("Function A called")
return
def bfunc():
foo.set('B')
tempchoice.set('bfuncaction')
return()
def bfuncaction():
print("Function B called")
return
def mystery():
item = ['afuncaction', 'bfuncaction']
result = random.choice(item)
foo.set("Mystery")
tempchoice.set(result)
return()
def confirm():
n = messagebox.askyesno("Selected Choice", "Call " + foo.get() + "?")
if n:
tempchoice
return
aButton = Button(root, text="A Function",command=afunc)
aButton.grid(row=0, column=0, sticky=W+E+N+S)
bButton = Button(root, text="B Function",command=bfunc)
bButton.grid(row=1, column=0, sticky=W+E+N+S)
quitButton = Button(root, text="Quit", command=exit)
quitButton.grid(row=7, column=0, sticky=W+E+N+S)
confirmButton = Button(root, text="Confirm", command=confirm)
confirmButton.grid(row=7, column=7)
root.mainloop()
如果您想使用函数名称作为字符串来调用函数,请参阅此 question/answer - Calling a function of a module from a string with the function's name in Python
举几个例子:
中查找函数
def foo():
print 'hello world'
globals()['foo']()
# > hello world
或者其次,如果您的函数是 class -
上的方法
class Foo(object):
def bar(self):
print 'hello world'
foo = Foo()
getattr( foo, 'bar' )()
# > hello world
def afunc():
foo.set('A')
tempchoice.set('afuncaction')
global myfunc
myfunc = afuncaction # save a reference to this function
...
if messagebox.askyesno:
myfunc()
顺便说一句,return
后不需要括号。它是一个语句,而不是一个函数。并且没有必要将它放在每个函数的末尾 - 如果一个函数到达其可用语句的末尾,它将自动 return
(返回值 None
)。
我有几个不同的函数要调用,但我想使用变量的值来调用。我在 tkinter 中使用按钮来更改变量的值,以及一个选择随机变量的按钮和一个显示当前值的标签(我在下面的代码中省略了它)。我有另一个创建 AskYesNo 消息框的按钮,以从用户处确认所选择的 button/variable 值是正确的。如果用户选择否,它 returns 到根 window。如果用户选择是,我希望程序调用与变量关联的函数。
我是 Python 和 tkinter 的初学者,所以请不要假设我对简单的编码一无所知。谢谢
请参阅下面的一些示例代码:
import random
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
root = Tk()
global tempchoice
global foo
tempchoice = StringVar()
item = StringVar()
def afunc():
foo.set('A')
tempchoice.set('afuncaction')
return()
def afuncaction():
print("Function A called")
return
def bfunc():
foo.set('B')
tempchoice.set('bfuncaction')
return()
def bfuncaction():
print("Function B called")
return
def mystery():
item = ['afuncaction', 'bfuncaction']
result = random.choice(item)
foo.set("Mystery")
tempchoice.set(result)
return()
def confirm():
n = messagebox.askyesno("Selected Choice", "Call " + foo.get() + "?")
if n:
tempchoice
return
aButton = Button(root, text="A Function",command=afunc)
aButton.grid(row=0, column=0, sticky=W+E+N+S)
bButton = Button(root, text="B Function",command=bfunc)
bButton.grid(row=1, column=0, sticky=W+E+N+S)
quitButton = Button(root, text="Quit", command=exit)
quitButton.grid(row=7, column=0, sticky=W+E+N+S)
confirmButton = Button(root, text="Confirm", command=confirm)
confirmButton.grid(row=7, column=7)
root.mainloop()
如果您想使用函数名称作为字符串来调用函数,请参阅此 question/answer - Calling a function of a module from a string with the function's name in Python
举几个例子:
中查找函数def foo():
print 'hello world'
globals()['foo']()
# > hello world
或者其次,如果您的函数是 class -
上的方法class Foo(object):
def bar(self):
print 'hello world'
foo = Foo()
getattr( foo, 'bar' )()
# > hello world
def afunc():
foo.set('A')
tempchoice.set('afuncaction')
global myfunc
myfunc = afuncaction # save a reference to this function
...
if messagebox.askyesno:
myfunc()
顺便说一句,return
后不需要括号。它是一个语句,而不是一个函数。并且没有必要将它放在每个函数的末尾 - 如果一个函数到达其可用语句的末尾,它将自动 return
(返回值 None
)。