【问题标题】:Linenumber Widget with Notebook widget python ttk带有笔记本小部件 python ttk 的 Linenumber 小部件
【发布时间】:2019-04-06 18:55:01
【问题描述】:

我正在使用 python 3.4.4 和 tkinter ttk..当前尝试使用我的 ttk notebook 小部件实现 line number 小部件,但没有给我错误,也没有打印行号..它与单个 Text 一起工作正常小部件...我肯定犯了一个错误,但我无法修复它感谢您的帮助。

main.py

​​>
import tkinter.ttk as ttks
from tkinter import LEFT,RIGHT,X,Y,BOTH
class MainUI:
    def __init__(self,master):
        self.master = master
        self.txs = []
        self.linenumber = ttks.tkinter.Canvas(self.master,border=0,width=25,bg="#808b96")
        self.linenumber.pack(side=LEFT,fill=Y)
        self.nb = ttks.Notebook(self.master)
        self.nb.pack(fill='both',expand=1)
        self.add_tabs()
        self._orig = self.txs[self.nb.index('current')]._w +"_orig"
        self.master.call("rename",self.txs[self.nb.index('current')]._w,self._orig)
        self.master.createcommand(self.txs[self.nb.index('current')]._w,self._proxy)
        self.master.bind('<Control-n>',self.add_tabs)
    def add_tabs(self,event=None):
        self.page_name = ttks.Frame(self.nb)
        self.tx = ttks.tkinter.Text(self.page_name)
        self.txs.append(self.tx)
        self.tx.pack(fill=BOTH,expand=1)
        self.nb.add(self.page_name,text="pagename")
    def redraw(self):
        self.linenumber.delete("all")
        i = self.txs[self.nb.index('current')].index("@0,0")
        while True:
            dline = self.txs[self.nb.index('current')].dlineinfo(i)
            if dline is None: break
            y = dline[1]
            linenum = str(i).split(".")[0]
            self.linenumber.create_text(2,y,anchor="nw",text=linenum)
            i = self.txs[self.nb.index('current')].index("%s+1line"%i)
    def _proxy(self,*args):
        try:
           cmd = (self._orig,)+args
           result = self.master.call(cmd)
           if (args[0] in ("insert","replace","delete") or
               args[0:3] in ("mark","set","insert") or
               args[0:2] in ("xview","moveto") or
               args[0:2] in ("xview","scroll") or
               args[0:2] in ("yview","moveto") or
               args[0:2] in ("yview","scroll")
           ):
               self.txs[self.nb.index('current')].event_generate("<<Change>>",when="tail")
           return result
        except:
            pass
    def Onchange(self,event):
        self.redraw() 
         

【问题讨论】:

  • 你永远不会打电话给redraw()
  • 谢谢,是的,我忘了bind Onchange 方法

标签: python-3.x tkinter tkinter-canvas ttk


【解决方案1】:

我忘了绑定Onchange 方法。 self.txs[self.nb.index('current')].bind("&lt;&lt;Change&gt;&gt;",self.Onchange) self.txs[self.nb.index('current')].bind("&lt;Configure&gt;",self.Onchange)

【讨论】:

    猜你喜欢
    • 2013-05-07
    • 2023-03-23
    • 1970-01-01
    • 2010-09-22
    • 2021-01-21
    • 2017-11-23
    • 2021-12-21
    • 2020-07-30
    • 2016-07-01
    相关资源
    最近更新 更多