2017-02-14 13 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 (или "insert") является специальной меткой, которая используется для представления курсора ввода . Tkinter рисует курсор в позиции этой метки, поэтому не совсем невидим.

CURRENT (или «current») является специальной меткой, которая представляет символ , ближайший к указателю мыши. Тем не менее, он обновляется только в том случае, если вы переместите мыши без удержания кнопок (если вы это сделаете, это не будет , пока вы не отпустите кнопку).

+0

Благодарим за помощь. Можете ли вы сказать мне, почему txt1 расширяется с увеличением шрифта. Когда я пытаюсь распространять (0), весь виджет txt1 исчезает. –

+0

Если бы мой ответ был помечен как правильный, пожалуйста. – eyllanesc

+0

'распространение (0)' Я не вижу его в вашем коде. – eyllanesc