tkinter回调异常_Python tkinter文本修改后的回调
在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文本修改后的回调相关推荐
- python tkinter计算器实例_Python+tkinter使用80行代码实现一个计算器实例
Python+tkinter使用80行代码实现一个计算器实例 本文主要探索的是使用Python+tkinter编程实现一个简单的计算器代码示例,具体如下. 闲话不说,直奔主题.建议大家跟着敲一遍代码, ...
- python tkinter控件_Python——Tkinter窗口的函数,Pythontkinter,视窗,功能,部件
tkinter简介 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.作为 pytho ...
- python tkinter设置窗口大小_Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例...
我就废话不多说了.大家直接看代码吧! #!/usr/bin/env python #coding=utf-8 ''' 窗口屏幕居中,设置窗口最大,最小尺寸... 版权所有 2014 yao_yu (h ...
- python tkinter label标签_Python Tkinter详解 (二)Label标签的使用
#一个简单到不能再简单的标签 import tkinter as tk window = tk.Tk() window.title('Label的使用') window.geometry('400x4 ...
- python的tkinter编写计算器_Python+Tkinter 实现计算器功能
1 #=================================================================================== 2 importtkint ...
- python tkinter计算器实例_python -Tkinter 实现一个小计算器功能
原博文 2017-03-25 22:08 − 文章来源:http://www.cnblogs.com/Skyyj/p/6618739.html 本代码是基于python 2.7的 如果是对于pytho ...
- python tkinter库四则运算_python tkinter 编写心理学试验程序干扰任务之四则运算 psychopy...
在训练任务与回忆任务之间,要求被试做4分钟的四则运算,包括20以内的加法.减法和乘法,被试需要输入运算结果.无论被试是否计算正确,皆进入下一题.4分钟的时间到后,结束干扰任务. 考虑到要求被试输入,用 ...
- python tkinter画布位置_Python Tkinter坐标画布
我在这里完全是初学者.我想知道x1的坐标,而它正在移动,所以它会不断更新.在 这是我的密码.在from tkinter import * import tkinter as tk import tim ...
- python tkinter控件_python tkinter 控件与布局 项目实战
from tkinter import * importtkinter.messagebox as messageboxclassTkdemo():def __init__(self): master ...
最新文章
- python起步输入-Python 起飞系列————起步(一)
- linux添加cmd命令行参数,Windows 终端命令行参数 | Microsoft Docs
- 为什么你总是申请不到大额贷款?
- 测试-LoadRunner
- RDS、DDS和GaussDB理不清?看这一篇足够了!
- Redis 6.0.0 GA
- C++版本 ORM 访问数据库之ODB 的oracle Demo测试(二)
- WIN7安装FreeSwitch,1.8版本无法安装,1.6版本成功
- jq实现底部弹框_WPF MVVM 弹框之等待框
- 全球第一开源ERP Odoo操作手册 数据库自动备份
- 金山词霸2006窗口消失不见,只能看见最大化界面
- Python教程(麻瓜编程实用主义学)
- 2021年高压电工免费试题及高压电工复审模拟考试
- 信捷XD5程序+TG765触摸屏程序,功能为XY双轴排版机,带2个气缸
- python竖线_python 读取竖线分隔符的文本方法
- 泥瓦匠想做一个与众不同的技术匠
- MySQL——初识MySQL
- 【亲测有效】win10修改电脑系统字体大小
- jstack 命令使用经验总结和线程性能诊断脚本
- Linux系统内部流量转发机制,使用TC实现基于Linux系统的流量管理