2016-04-24 14 views
2

Ich bin ein Anfänger in der Programmierung. Ich mache das als Hobby und um meine Produktivität bei der Arbeit zu verbessern.Tkinter Windows reagiert nicht bei Verwendung von update() in einer While-Schleife

Ich schreibe ein Programm, um automatisch die Zwischenablage zu einem Tkinter entry einfügen, wenn ein Benutzer eine Textzeile kopieren.

Ich verwende eine while Schleife, um festzustellen, ob es eine Änderung in der aktuellen Zwischenablage gibt, dann fügen Sie den neu kopierten Text der Zwischenablage in den Tkinter-Eintrag ein.

Die GUI wird perfekt aktualisiert, wenn ich eine neue Textzeile kopiere.

Die GUI reagiert jedoch nicht und ich kann nicht auf die TK entry klicken, um etwas einzugeben, das ich möchte.

FYI Ich verwende Python 3.5 Software. Vielen Dank im Voraus.

Mein Code:

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() 

Antwort

0

Sie benötigen eine while-Schleife in einer def setzen, dann ist es in einem neuen Thread starten, auf diese Weise Ihre gui won't einfrieren. zB

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()