Окна Tkinter не отвечают при использовании update() в цикле while
Я новичок в программировании. Я делаю это как хобби и повышаю свою производительность на работе.
Я пишу программу для автоматической вставки буфера обмена в Tkinter entry
всякий раз, когда пользователь копирует строку текста.
Я использую while
Цикл, чтобы обнаружить, есть ли изменения в текущем буфере обмена, затем вставьте недавно скопированный текст буфера обмена в запись Tkinter.
GUI обновляется отлично, когда я копирую новую строку текста.
Однако графический интерфейс не отвечает, и я не могу нажать на TK entry
набрать то, что я хочу.
К вашему сведению, я использую Python 3.5
программного обеспечения. Заранее спасибо.
Мой код:
from tkinter import *
import pyperclip
#initial placeholder
#----------------------
old_clipboard = ' '
new_clipboard = ' '
#The GUI
#--------
root = Tk()
textvar = StringVar()
label1 = Label(root, text='Clipboard')
entry1 = Entry(root, textvariable=textvar)
label1.grid(row=0, sticky=E)
entry1.grid(row=0, column=1)
#while loop
#-----------
while(True): #first while loop: keep monitoring for new clipboard
while(old_clipboard == new_clipboard): #second while loop: check if old_clipboard is equal to the new_clipboard
new_clipboard = pyperclip.paste() #get the current clipboard
print('\nold clipboard pre copy: ' + old_clipboard)
old_clipboard = new_clipboard #assign new_clipboard to old_clipboard
print('current clipboard post copy: ' + old_clipboard)
print('\ncontinuing the loop...')
textvar.set(old_clipboard) #set the current clipboard to GUI entry
root.update() #update the GUI
root.mainloop()
1 ответ
Вам нужно поместить цикл while в def, а затем запустить его в новом потоке, чтобы ваш графический интерфейс не зависал. например:
import threading
def clipboardcheck():
#Your while loop stuff
class clipboardthread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
clipboardcheck()
clipboardthread.daemon=True #Otherwise you will have issues closing your program
clipboardthread().start()