2017-02-14 55 views
-2

我在框架 中有一个标签和文本小部件,用作状态栏。当光标移动 (通过按任意键或回车键),状态 栏显示位置。但更新速度较慢 并且当快速或重复按下“键”时,光标位置编号停止位显示新的光标位置 。这里是我的代码...当光标移动时,光标位置统计信息更新缓慢

更新:

我张贴一些代码,有人问我要发布更多的代码。 这里是整个程序。希望它不多。我也有 文字部件(txt1)随着所选 增加的字体大小而增大的问题。

请忽略搜索文本的功能,我只是盯着今天与 玩弄它的乱七八糟的一点点,

谢谢,韦恩。

代码:

from tkinter import * 
from tkinter import Menu 
from tkinter import filedialog 
from tkinter import messagebox 
from tkinter import ttk 
from tkinter import Tk 
from tkinter import font 


class Mainfun: 

    def __init__(self, master): 
     super(Mainfun, self).__init__() 

     self.master = master 
     fnt1='' 
     pnt1='' 
     wh1='' 

     def mkfrm(): 
      self.topframe=Frame(self.master) 
      self.topframe.pack(side=TOP, fill=X) 

      self.frame1=Frame(master, padx=15, pady=10) 
      self.frame1.pack(fill=BOTH) 
      self.bottomframe=Frame(master) 
      self.bottomframe.pack(side=BOTTOM, fill=X) 

     def mktxt(): 
      self.txt1=Text(self.frame1, padx=10, pady=14, height=22, width=79, bg="white", fg="black", wrap=WORD) 
      self.txt1.pack(side=LEFT, fill=BOTH) 

     def mkscr(): 
      self.scr=Scrollbar(self.frame1, command=self.txt1.yview) 
      self.scr.pack(side=RIGHT, fill=Y) 

     def cpupdated(event): 
      self.cp1=self.txt1.index(CURRENT) 
      self.txt2.delete(1.0, END) 
      self.txt2.insert(INSERT, self.cp1) 
      self.txt2.update() 

     def mkstat(): 
      self.cp1='' 
      self.status=Label(self.bottomframe, anchor=W, padx=15, bd=2, text="CURSOR: (Row):/(Col): ", relief=SUNKEN) 
      self.status.pack(side=BOTTOM, fill=X) 
      self.txt2=Text(self.status, height=1, width=5, bd=1, fg="black",bg="light grey") 
      self.txt2.pack(anchor=W, padx=150) 
      self.txt1.bind('<KeyPress>', cpupdated) 


     def mkmnu(): 
      self.mnu=Menu(self.topframe) 
      self.master.config(menu=self.mnu) 

      self.filmenu=Menu(self.mnu, tearoff=0) 
      self.filmenu.add_command(label="New", command=filnew) 
      self.filmenu.add_command(label="Open", command=flopen) 
      self.filmenu.add_command(label="Save As", command=filsaveas) 
      self.filmenu.add_separator() 
      self.filmenu.add_command(label="Print", command=mkprnt) 
      self.filmenu.add_separator() 
      self.filmenu.add_command(label="Exit", command=filexit) 
      self.mnu.add_cascade(label=" File ", menu=self.filmenu) 

      self.editmenu=Menu(self.mnu, tearoff=0) 
      self.editmenu.add_command(label="Cut", command=filcut) 
      self.editmenu.add_command(label="Copy", command=filcopy) 
      self.editmenu.add_command(label="Paste", command=filpaste) 
      self.editmenu.add_separator() 
      self.editmenu.add_command(label="Select All", command=filsel) 
      self.mnu.add_cascade(label=" Edit ", menu=self.editmenu) 

      self.helpmenu=Menu(self.mnu, tearoff=0) 
      self.helpmenu.add_command(label="Find", command=fndtxt) 
      self.helpmenu.add_command(label="Change Font", command=mkfont) 
      self.helpmenu.add_command(label="About Us", command=aboutus) 
      self.mnu.add_cascade(label=" Tools ", menu=self.helpmenu) 

     def filnew(): 
      self.txt1.event_generate('<Control-n>') 
      self.txt1.delete(1.0, END) 

     def flopen(): 
      self.fil=filedialog.askopenfile() 
      self.txt1.delete(1.0, END) 
      self.txt1.insert(INSERT, self.fil.read()) 
      self.fil.close() 

     def filsaveas(): 
      self.fil=filedialog.asksaveasfile() 
      self.text2=str(self.txt1.get(1.0, END)) 
      self.fil.write(self.text2) 
      self.fil.close() 

     def mkprnt(): 
      self.txt1.event_generate('<Control-P>') 

     def filexit(): 
      self.msg1=messagebox.askquestion("Exit:", "Do you realy want to exit?") 
      if self.msg1=="yes": 
       self.master.quit() 

     def filcut(*event): 
      self.txt1.event_generate('<Control-x>') 

     def filcopy(): 
      self.txt1.event_generate('<Control-c>') 

     def filpaste(): 
      self.txt1.event_generate('<Control-v>') 

     def filsel(): 
      self.txt1.event_generate('<Control-a>') 

     def aboutus(): 
      self.msg2=messagebox.showinfo("About", "Text Edit: v1.0\nPython: v3.4.4\nTkinter GUI: v8.6\nCompiler: Py2Exe v0.9.9.2\nAuthor - Wayne Lampiasi\nEmail: [email protected]") 

     def fndselect(): 
      self.text3=str(self.txt3.get(1.0, END)) 
      self.text4=str(self.txt1.get(1.0, END)) 
      if self.text3==self.text4: 
       print("found") 
      else: 
       print("not found") 

     def fndquit(): 
      self.fndwin.destroy() 


     def fndtxt(): 
      self.fndwin=Tk() 
      self.fndwin.title("- Find -") 
      self.fndwin.geometry("225x100") 
      self.fndwin.resizable(0,0) 

      self.label1=Label(self.fndwin) 
      self.label1.grid(row=1, column=1) 
      self.label2=Label(self.fndwin, text="Enter Search:") 
      self.label2.grid(row=2, column=1, padx=15) 
      self.txt3=Text(self.fndwin, fg="black", bg="white", height=1, width=12) 
      self.txt3.grid(row=2, column=2) 
      self.label4=Label(self.fndwin) 
      self.label4.grid(row=4, column=1) 

      self.button1=Button(self.fndwin, text="Go", command=fndselect) 
      self.button1.grid(row=5, column=1) 
      self.button2=Button(self.fndwin, text="Close", command=fndquit) 
      self.button2.grid(row=5, column=2) 
      self.label5=Label(self.fndwin) 
      self.label5.grid(row=6, column=1) 

     def mkfont(): 
      self.subwin=Tk() 
      self.subwin.title("- Fonts -") 
      self.subwin.geometry("225x260") 
      self.subwin.resizable(0,0) 

      self.label1=Label(self.subwin) 
      self.label1.grid(row=1, column=1) 

      self.label2=Label(self.subwin, text="Choose Font:") 
      self.label2.grid(row=2, column=1) 

      self.cb1=ttk.Combobox(self.subwin, width=25, state='readonly') 
      self.Stringval1=self.cb1 
      self.cb1.grid(row=3, column=1) 
      self.cb1['values']=['Arial', 
       'Helvetica', 
       'Courier New', 
       'Comic Sans MS', 
       'Fixedsys', 
       'MS Sans Serif', 
       'MS Serif', 
       'Symbol', 
       'System', 
       'Times New Roman', 
       'Verdana'] 

      self.label3=Label(self.subwin) 
      self.label3.grid(row=4, column=1) 

      self.label4=Label(self.subwin, text="Choose Size:") 
      self.label4.grid(row=5, column=1) 

      self.cb2=ttk.Combobox(self.subwin, width=25, state='readonly') 
      self.Intval2=self.cb2 
      self.cb2.grid(row=6, column=1) 
      self.cb2['values']=[" 8", 
       " 9", 
       " 10", 
       " 11", 
       " 12", 
       " 13", 
       " 14", 
       " 15", 
       " 16", 
       " 17", 
       " 18"] 

      self.label5=Label(self.subwin) 
      self.label5.grid(row=7, column=1) 

      self.label6=Label(self.subwin, text="Choose Weight") 
      self.label6.grid(row=8, column=1) 

      self.cb3=ttk.Combobox(self.subwin, width=25, state='readonly') 
      self.Sringval3=self.cb3 
      self.cb3.grid(row=9, column=1, padx=20) 
      self.cb3['values']=["normal", 
       "bold"] 

      self.label7=Label(self.subwin) 
      self.label7.grid(row=11, column=1) 

      self.button1=Button(self.subwin, text="Apply Fonts", command=selected) 
      self.button1.grid(row=12, column=1) 

     def subwinquit(): 
      self.subwin.destroy() 

     def selected(): 
      self.Stringval1=self.cb1.get() 
      fnt1 = self.Stringval1 
      self.Intval2=self.cb2.get() 
      pnt1 = self.Intval2 
      self.Stringval3=self.cb3.get() 
      wh1 = self.Stringval3 
      font.Font(family=(fnt1, pnt1, wh1)) 
      self.txt1.config(font=(fnt1, pnt1, wh1)) 
      self.subwin.eval('ttk::CancelRepeat') 
      self.subwin.destroy() 

     mkfrm() 
     mktxt() 
     mkscr() 
     mkstat() 
     mkmnu() 


root=Tk() 
root.title("Text Edit") 
root.resizable(0,0) 
obj1=Mainfun(root) 
root.update() 
root.mainloop() 
+1

你能显示更多的代码吗?例如无论创建“主人”。足以实际运行某些东西会更可取。 –

+0

我们不需要_whole_代码。请删除与问题无关的代码。如果问题是在绑定上显示信息,则只需要文本小部件,绑定语句,绑定使用的函数以及几行代码将它们粘合在一起。请阅读并遵循[如何创建最小,完整和可验证示例]的建议(http://stackoverflow.com/help/mcve) –

回答

1

您必须更改:

self.cp1=self.txt1.index(CURRENT) 

self.cp1=self.txt1.index(INSERT) 

doc:

Tkinter预先定义了两个标记,并且具有特殊含义:

INSERT(或“插入”)是用于表示插入游标的特殊标记,用于表示 插入游标。 Tkinter在这个标记的位置绘制光标,所以它不是完全不可见的。

CURRENT(或“current”)是一个特殊标记,表示最接近鼠标指针的字符 。但是,只有在您没有按住任何按钮的情况下移动鼠标 (如果您这样做,它将不会更新,直到您释放按钮为止)。

+0

感谢您的帮助。你能告诉我为什么txt1随着字体的增加而扩展。当我尝试传播(0)整个txt1小部件消失。 –

+0

如果我的答案被标记为正确,请。 – eyllanesc

+0

'propagate(0)' 我没有在你的代码中看到它。 – eyllanesc