2017-04-10 7 views
0

Ich schreibe ein Python-Skript, das den Inhalt der Zwischenablage überprüft und in der Konsole ausgibt. Das Folgende ist das Skript, das ich verwende.tkinter Fehler beim Kopieren von Inhalten aus der Zwischenablage in Python

import time 
from tkinter import Tk 

while True: 
    r = Tk() 
    result = r.selection_get(selection="CLIPBOARD") 
    print(result) 
    time.sleep(2) 

Wenn ich es laufen, ohne Text zu kopieren, erhalte ich die folgenden Fehler:

return self.tk.call(('selection', 'get') + self._options(kw)) 
_tkinter.TclError: CLIPBOARD selection doesn't exist or form "STRING" not defined 

ich, dass es zu verstehen scheint, da es keine Inhalte in der Zwischenablage befinden. Einmal nach dem Kopieren eines Textes, läuft der Code gut. Um das Problem zu überwinden, schrieb ich den Code auf folgende Weise:

import time 
from tkinter import Tk 

r = Tk() 
x = 1 
while x < 2: 
    r.clipboard_clear() 
    r.clipboard_append("Starter Text") 
    x += 1 

while True: 
    r.clipboard_clear() 
    result = r.selection_get(selection="CLIPBOARD") 
    print(result) 
    time.sleep(2) 

Ich schrieb dies so, dass ich die Datei mit einem Starter Text in der Zwischenablage starten kann. Dies wird helfen, den Fehler zu stoppen. Obwohl der Fehler nicht mehr auftritt, druckt der Code jetzt nur noch "Starter Text". Auch nach dem Kopieren von Inhalten in die Zwischenablage scheinen sie nicht gedruckt zu werden.

Kann ich einige Vorschläge zur Vermeidung des Fehlers erhalten und gleichzeitig die Werte drucken, wenn ich etwas in die Zwischenablage kopiere.

+0

Ihr Trick "Starter Text" behebt das Problem nicht - was, wenn der Benutzer ein Bild oder ein anderes Nicht-Text-Objekt in die Zwischenablage kopiert hat, während das Programm läuft? Sie müssen "try"/"except" verwenden, um den Fehler zu erkennen und zu ignorieren, wenn kein Text in der Zwischenablage vorhanden ist. Ich bin mir nicht sicher, warum Sie keine Änderungen in der Zwischenablage sehen - vielleicht muss der Tkinter-Hauptloop ausgeführt werden, damit dies funktioniert. – jasonharper

Antwort

0

Ich kam mit dem unten stehenden Skript und es half mir zu bekommen, was ich angestrebt habe.

import time 
from tkinter import Tk 

while True: 
    r = Tk() 
    try: 
     result = r.selection_get(selection="CLIPBOARD") 
     print(result) 
     time.sleep(1) 
    except: 
     selection = None 

ging ich mit einem allgemeinen mit mit dem Versuch, außer Block auf Ausnahme. @Bryan Oakleys Vorschlag half sehr.

1

Sie können nicht vermeiden der Fehler, da dies Verhalten ausgelegt ist, aber Sie können behandeln den Fehler.

+0

Hallo, ich verwendet, um den Code 'while True: r = Tk() r.clipboard_clear() Versuch: result = r.selection_get (Auswahl = "Zwischenablage") print (Ergebnis) time.sleep (2) außer Tk.tclError: selection = None', aber ich erhalte einen Fehler mit - 'AttributeError: type object 'Tk' hat kein Attribut 'tclError'' – mbvee

+1

@mbvee: diese Fehlermeldung scheint ziemlich selbsterklärend zu sein. Eine Instanz von "Tk" hat nicht das Attribut "TclError". Das ist nicht, was mein Code zeigt. Mein Code zeigt deutlich mit 'TclError' aus dem Tkinter-Modul. Außerdem gibt es absolut keinen Grund, 'Tk()' in einer Endlosschleife zu nennen. Es muss nur einmal erstellt werden. –

+0

Danke für die Antwort. Ich habe die Importaussage verpasst. Ich hatte auch 'Importzeit von tkinter Import Tk' am Anfang der Datei. – mbvee

Verwandte Themen