免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3493 | 回复: 5
上一主题 下一主题

关于tkinter entry控件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-01 16:25 |只看该作者 |倒序浏览
如果entry里的内容发生变化,能触发事件么。查了半天没有查到。

就是想当entry控件里的内容发生变化后,要执行一些操作。

谢谢

论坛徽章:
0
2 [报告]
发表于 2012-12-01 18:27 |只看该作者
建立文本框时绑定一个控件变量到textvariable属性,然后使用控件变量的trace()或trace_variable()来注册一个控件变量的监视器,语法为:
控件变量名.trace(mode, callback),
Mode取值,’r’:监视读事件,’w’:监视写事件,’u’:监视变量删除事件。
监视器函数原型:def callback(*args)。
Track()或trace_variable()会返回一个字符串,这个字符串用在trace_vdelete()中注销监视器。
trace_vdelete(mode, observer_name):注销控件变量监视器。

论坛徽章:
0
3 [报告]
发表于 2012-12-02 21:25 |只看该作者
好的。我试试。谢谢了

论坛徽章:
0
4 [报告]
发表于 2012-12-02 23:44 |只看该作者
回复 2# cdhigh


    def updatedatawidget(*e):
        xyz=[float(i) for i in currentptstr.get().split(',')]
        txyz=c.sb.get().split(':')[1]
        transxys=[float(i) for i in txyz.split(',')]
        res=[xyz+transxys for i in range(3)]
        pt=Point(*res)
        #print datapoints.getnum()
        datapoints.addPoint(pt)
        #print datapoints.getnum()
        d.dataWidget.delete(1.0,END)
        d.dataWidget.insert(1.0,'\n'.join(datapoints.pointsliststr()[1:]))
        
        
    currentptstr.trace('w',updatedatawidget)


谢谢啊。我用上边的方法可以显示了,可是有个问题就是传的 *e里没有 textvariable变量,只能从外部引用?

论坛徽章:
0
5 [报告]
发表于 2012-12-03 01:04 |只看该作者
这种情况一般只能使用外部引用,如果你的TKINTER程序架构是面向对象的话,可以保存控件变量为实例变量,则在回调函数中可以直接引用,如果是面向结构的(你的程序好像是),则一般是将控件变量保存到一个全局字典中,在其他回调函数可以引用。
当然,还有很多其他方法,比如:
因为*e的第一个元素为控件变量的名字(字符串),可以使用tk实例对象或TOP窗口实例对象的globalgetvar(变量名)获取变量值。

论坛徽章:
0
6
发表于 2014-07-17 13:52

真心赞的控件知识分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP