python – 与Tkinter跟踪关联的回调函数有哪些限制?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 与Tkinter跟踪关联的回调函数有哪些限制?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2923字,纯文字阅读大概需要5分钟。
内容图文
![python – 与Tkinter跟踪关联的回调函数有哪些限制?](/upload/InfoBanner/zyjiaocheng/802/e4fa03306c23474ebd684c7716b0351c.jpg)
我试图弄清楚如何实现一个回调函数,它做的事情比打印输出更有意义.我相当缺乏经验,所以我不确定回调函数应该或可以用Python(或任何其他语言)来实现.
请考虑以下Python代码:
from Tkinter import *
def callbackfunc(*args):
print "Hello World!"
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
optionvalue = IntVar(master)
optionvalue.set(2)
optionvalue.trace("w", callbackfunc)
self.optionmenu = OptionMenu(master, optionvalue, 1, 2, 3, 4)
self.optionmenu.pack()
我正在尝试实现一个OptionMenu(一个Tkinter小部件),这样当它的选择值改变时,我的回调函数会做一些有意义的事情 – 更具体地说,它将改变一个全局变量值,在程序的其他地方定义.如上所述,它只是打印输出(虽然成功).
我无法弄清楚如何将参数传递给我的回调函数.我不希望这个特殊的回调函数返回任何东西;但是,我很好奇我将如何使我的回调函数返回一些东西,以及如何实现我的程序的其余部分,以便它可以利用那些返回的结果,无论那些可能是什么.我是否试图以一种不打算实现的方式实现Python回调函数?如果没有,我该如何使这个工作?
解决方法:
通过“将参数传递给我的回调函数”,你有点不清楚是什么意思.你已经这样做了!例如:
from Tkinter import *
def callbackfunc(*args, **kwargs):
print args, kwargs
print "Hello World!"
class App(object):
def __init__(self, master):
frame = Frame(master)
frame.pack()
optionvalue = IntVar(master)
optionvalue.set(2)
optionvalue.trace("w", callbackfunc)
self.optionmenu = OptionMenu(master, optionvalue, 1, 2, 3, 4)
self.optionmenu.pack()
root = Tk()
app = App(root)
root.mainloop()
跑的时候……
$python foo.py
('PY_VAR0', '', 'w') {}
Hello World!
所以你看,当Tkinter调用你的回调时,它会将参数传递给它.如果你想做除打印之外的其他事情,你可以通过传递方法而不是函数将它们存储在某种状态.
from Tkinter import *
class App(object):
def __init__(self, master):
frame = Frame(master)
frame.pack()
optionvalue = IntVar(master)
optionvalue.set(2)
optionvalue.trace("w", self.callbackfunc)
self.optionmenu = OptionMenu(master, optionvalue, 1, 2, 3, 4)
self.optionmenu.pack()
self.state = []
def callbackfunc(self, *args):
self.state.append(args)
print self.state
root = Tk()
app = App(root)
root.mainloop()
跑的时候……
$python foo.py
[('PY_VAR0', '', 'w')]
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
此外,您可能希望访问optionvalue的值.您可以保存对它的引用:
from Tkinter import *
class App(object):
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.optionvalue = IntVar(master)
self.optionvalue.set(2)
self.optionvalue.trace("w", self.callbackfunc)
self.optionmenu = OptionMenu(master, self.optionvalue, 1, 2, 3, 4)
self.optionmenu.pack()
self.state = []
def callbackfunc(self, *args):
self.state.append(args)
print self.state
print self.optionvalue.get()
root = Tk()
app = App(root)
root.mainloop()
跑的时候……
$python foo.py
[('PY_VAR0', '', 'w')]
1
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
2
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
3
你也可以使用root.getvar(name),其名称=’PY_VAR0′(传递给回调的第一个arg),如noob oddy所示.
内容总结
以上是互联网集市为您收集整理的python – 与Tkinter跟踪关联的回调函数有哪些限制?全部内容,希望文章能够帮你解决python – 与Tkinter跟踪关联的回调函数有哪些限制?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。