在python 2.7中,每次在Tkinter Text小部件中更改某些内容时,我都会尝试进行回调.

这两个代码分别工作正常,但将这两个代码组合起来对我来说很难.

这是我尽可能使用裸代码的尝试.

import Tkinter as tk

class Texter(tk.Tk):

def __init__(self, *args, **kwargs):

tk.Tk.__init__(self, *args, **kwargs)

container = tk.Frame(self)

container.pack()

self.frames = {}

for F in (ConnectPage, EditorPage):

frame = F(container, self)

self.frames[F] = frame

frame.grid(row=0, column=0, sticky="nsew")

page_name = EditorPage.__name__

self.frames[page_name] = frame

self.show_frame(ConnectPage)

def show_frame(self, cont):

frame = self.frames[cont]

frame.tkraise()

def get_page(self, page_name):

return self.frames[page_name]

class ConnectPage(tk.Frame):

def __init__(self, parent, controller):

tk.Frame.__init__(self, parent)

button1 = tk.Button(self, text="SecondPage",

command=lambda: controller.show_frame(EditorPage))

button1.grid(row=2, column=3, padx=15)

class EditorPage(tk.Frame):

def __init__(self, parent, controller):

tk.Frame.__init__(self, parent)

self.text = tk.Text(self, height=25, width=80)

self.text.grid(column=0, row=0, sticky="nw")

button2 = tk.Button(self, text="FirstPage",

command=lambda: controller.show_frame(ConnectPage))

button2.grid(row=2, column=3, padx=15)

self.clearModifiedFlag()

self.bind_all('<>', self._beenModified)

def _beenModified(self, event=None):

if self._resetting_modified_flag: return

self.clearModifiedFlag()

print("Hello!")

#self.beenModified(event)

def clearModifiedFlag(self):

self._resetting_modified_flag = True

try:

self.tk.call(self._w, 'edit', 'modified', 0)

finally:

self._resetting_modified_flag = False

if __name__ == '__main__':

gui = Texter()

gui.mainloop()

我尝试从回调示例中仅获取必要的部分.

代码确实进行了回调(如果修改了文本时self.tk.call(self._w,’edit’,’modified’,0)行被注释掉),但重置修改后的标志不起作用,所以只第一个修改已注册.

目前我收到以下错误:

第67行,在clearModifiedFlag中

????self.tk.call(self._w,’edit’,’modified’,0)

_tkinter.TclError:错误选项“编辑”:必须是cget或configure

在回调示例代码中,“编辑”工作正常.

编辑:这是工作代码

import Tkinter as tk

class Texter(tk.Tk):

def __init__(self, *args, **kwargs):

tk.Tk.__init__(self, *args, **kwargs)

container = tk.Frame(self)

container.pack()

self.frames = {}

for F in (ConnectPage, EditorPage):

frame = F(container, self)

self.frames[F] = frame

frame.grid(row=0, column=0, sticky="nsew")

page_name = EditorPage.__name__

self.frames[page_name] = frame

self.show_frame(ConnectPage)

def show_frame(self, cont):

frame = self.frames[cont]

frame.tkraise()

def get_page(self, page_name):

return self.frames[page_name]

class ConnectPage(tk.Frame):

def __init__(self, parent, controller):

tk.Frame.__init__(self, parent)

button1 = tk.Button(self, text="SecondPage",

command=lambda: controller.show_frame(EditorPage))

button1.grid(row=2, column=3, padx=15)

class EditorPage(tk.Frame):

def __init__(self, parent, controller):

tk.Frame.__init__(self, parent)

self.text = CustomText(self, height=25, width=80)

self.text.grid(column=0, row=0, sticky="nw")

self.text.bind("<>", self.onModification)

button2 = tk.Button(self, text="FirstPage",

command=lambda: controller.show_frame(ConnectPage))

button2.grid(row=2, column=3, padx=15)

def onModification(self, event):

print("Yellow!")

class CustomText(tk.Text):

def __init__(self, *args, **kwargs):

"""A text widget that report on internal widget commands"""

tk.Text.__init__(self, *args, **kwargs)

# create a proxy for the underlying widget

self._orig = self._w + "_orig"

self.tk.call("rename", self._w, self._orig)

self.tk.createcommand(self._w, self._proxy)

def _proxy(self, command, *args):

cmd = (self._orig, command) + args

result = self.tk.call(cmd)

if command in ("insert", "delete", "replace"):

self.event_generate("<>")

return result

if __name__ == '__main__':

gui = Texter()

gui.mainloop()

tkinter回调异常_Python tkinter文本修改后的回调相关推荐

  1. python tkinter计算器实例_Python+tkinter使用80行代码实现一个计算器实例

    Python+tkinter使用80行代码实现一个计算器实例 本文主要探索的是使用Python+tkinter编程实现一个简单的计算器代码示例,具体如下. 闲话不说,直奔主题.建议大家跟着敲一遍代码, ...

  2. python tkinter控件_Python——Tkinter窗口的函数,Pythontkinter,视窗,功能,部件

    tkinter简介 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.作为 pytho ...

  3. python tkinter设置窗口大小_Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例...

    我就废话不多说了.大家直接看代码吧! #!/usr/bin/env python #coding=utf-8 ''' 窗口屏幕居中,设置窗口最大,最小尺寸... 版权所有 2014 yao_yu (h ...

  4. python tkinter label标签_Python Tkinter详解 (二)Label标签的使用

    #一个简单到不能再简单的标签 import tkinter as tk window = tk.Tk() window.title('Label的使用') window.geometry('400x4 ...

  5. python的tkinter编写计算器_Python+Tkinter 实现计算器功能

    1 #=================================================================================== 2 importtkint ...

  6. python tkinter计算器实例_python -Tkinter 实现一个小计算器功能

    原博文 2017-03-25 22:08 − 文章来源:http://www.cnblogs.com/Skyyj/p/6618739.html 本代码是基于python 2.7的 如果是对于pytho ...

  7. python tkinter库四则运算_python tkinter 编写心理学试验程序干扰任务之四则运算 psychopy...

    在训练任务与回忆任务之间,要求被试做4分钟的四则运算,包括20以内的加法.减法和乘法,被试需要输入运算结果.无论被试是否计算正确,皆进入下一题.4分钟的时间到后,结束干扰任务. 考虑到要求被试输入,用 ...

  8. python tkinter画布位置_Python Tkinter坐标画布

    我在这里完全是初学者.我想知道x1的坐标,而它正在移动,所以它会不断更新.在 这是我的密码.在from tkinter import * import tkinter as tk import tim ...

  9. python tkinter控件_python tkinter 控件与布局 项目实战

    from tkinter import * importtkinter.messagebox as messageboxclassTkdemo():def __init__(self): master ...

最新文章

  1. python起步输入-Python 起飞系列————起步(一)
  2. linux添加cmd命令行参数,Windows 终端命令行参数 | Microsoft Docs
  3. 为什么你总是申请不到大额贷款?
  4. 测试-LoadRunner
  5. RDS、DDS和GaussDB理不清?看这一篇足够了!
  6. Redis 6.0.0 GA
  7. C++版本 ORM 访问数据库之ODB 的oracle Demo测试(二)
  8. WIN7安装FreeSwitch,1.8版本无法安装,1.6版本成功
  9. jq实现底部弹框_WPF MVVM 弹框之等待框
  10. 全球第一开源ERP Odoo操作手册 数据库自动备份
  11. 金山词霸2006窗口消失不见,只能看见最大化界面
  12. Python教程(麻瓜编程实用主义学)
  13. 2021年高压电工免费试题及高压电工复审模拟考试
  14. 信捷XD5程序+TG765触摸屏程序,功能为XY双轴排版机,带2个气缸
  15. python竖线_python 读取竖线分隔符的文本方法
  16. 泥瓦匠想做一个与众不同的技术匠
  17. MySQL——初识MySQL
  18. 【亲测有效】win10修改电脑系统字体大小
  19. jstack 命令使用经验总结和线程性能诊断脚本
  20. Linux系统内部流量转发机制,使用TC实现基于Linux系统的流量管理

热门文章

  1. Flask搭建二进制音频传送接口
  2. python-docx官方声明
  3. python ssh登录远程执行命令
  4. 高性能HTTP加速器varnish实践
  5. Git查看、删除、重命名远程分支和tag【转】
  6. Java项目-基于SSM实现律师事务所管理平台
  7. Origin对于标注点
  8. pandas实现众数和众数的频数
  9. Ensemble Methods——python
  10. flask第十篇——url_for【3】