from idlelib.delegator import Delegatorfrom idlelib.redirector import WidgetRedirectorclass Percolator:def __init__(self, text):# XXX would be nice to inherit from Delegatorself.text = textself.redir = WidgetRedirector(text)self.top = self.bottom = Delegator(text)self.bottom.insert = self.redir.register("insert", self.insert)self.bottom.delete = self.redir.register("delete", self.delete)self.filters = []def close(self):while self.top is not self.bottom:self.removefilter(self.top)self.top = Noneself.bottom.setdelegate(None)self.bottom = Noneself.redir.close()self.redir = Noneself.text = Nonedef insert(self, index, chars, tags=None):# Could go away if inheriting from Delegatorself.top.insert(index, chars, tags)def delete(self, index1, index2=None):# Could go away if inheriting from Delegatorself.top.delete(index1, index2)def insertfilter(self, filter):# Perhaps rename to pushfilter()?assert isinstance(filter, Delegator)assert filter.delegate is Nonefilter.setdelegate(self.top)self.top = filterdef removefilter(self, filter):# XXX Perhaps should only support popfilter()?assert isinstance(filter, Delegator)assert filter.delegate is not Nonef = self.topif f is filter:self.top = filter.delegatefilter.setdelegate(None)else:while f.delegate is not filter:assert f is not self.bottomf.resetcache()f = f.delegatef.setdelegate(filter.delegate)filter.setdelegate(None)def _percolator(parent): # htest #import tkinter as tkclass Tracer(Delegator):def __init__(self, name):self.name = nameDelegator.__init__(self, None)def insert(self, *args):print(self.name, ": insert", args)self.delegate.insert(*args)def delete(self, *args):print(self.name, ": delete", args)self.delegate.delete(*args)box = tk.Toplevel(parent)box.title("Test Percolator")x, y = map(int, parent.geometry().split('+')[1:])box.geometry("+%d+%d" % (x, y + 175))text = tk.Text(box)p = Percolator(text)pin = p.insertfilterpout = p.removefiltert1 = Tracer("t1")t2 = Tracer("t2")def toggle1():(pin if var1.get() else pout)(t1)def toggle2():(pin if var2.get() else pout)(t2)text.pack()var1 = tk.IntVar(parent)cb1 = tk.Checkbutton(box, text="Tracer1", command=toggle1, variable=var1)cb1.pack()var2 = tk.IntVar(parent)cb2 = tk.Checkbutton(box, text="Tracer2", command=toggle2, variable=var2)cb2.pack()if __name__ == "__main__":from unittest import mainmain('idlelib.idle_test.test_percolator', verbosity=2, exit=False)from idlelib.idle_test.htest import runrun(_percolator)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。