2017-04-10 92 views
0

複製從剪貼板中的內容時,我正在寫一個Python腳本,將檢查剪貼板中的內容,並將它們打印在控制檯中。以下是我正在使用的腳本。Tkinter的錯誤在Python

import time 
from tkinter import Tk 

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

當我運行它,而不復制任何文字,我得到下面的錯誤:

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

我明白,它表現爲有剪貼板沒有內容。一旦複製任何文本後,代碼運行良好。爲了克服這個問題,我重寫了代碼以下列方式:

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) 

我寫了這個,這樣我可以通過在剪貼板首發文本開始文件。這將有助於停止錯誤。即使它阻止了發生的錯誤,代碼現在也會重複打印「Starter Text」。即使將內容複製到剪貼板後,它們似乎也不會被打印出來。

我能如何避免錯誤,同時提出了一些建議打印值每當我的東西複製到剪貼板。

+0

你「開頭文字」招實際上並沒有解決這個問題 - 如果用戶使用你的程序運行時要複印的圖像或其他非文本項目複製到剪貼板?當剪貼板上沒有文本時,您需要使用'try' /'except'來捕捉並忽略錯誤。我不知道爲什麼你沒有看到變化到剪貼板 - 也許主循環需要的Tkinter來運行這個工作。 – jasonharper

回答

0

我碰到與下面的腳本,它幫助我得到了我的目標。

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 

我繼續嘗試除了塊以外的泛型除外。 @Bryan Oakley的建議幫了很大忙。

1

您不能避免錯誤,因爲這是設計的行爲,但你可以處理錯誤。

import tkinter as tk 
... 
try: 
    selection = r.selection.get(selection="CLIPBOARD") 
except tk.TclError: 
    selection = None 
... 
+0

您好,我使用的代碼'而真: R = TK() r.clipboard_clear() 嘗試: 結果= r.selection_get(選擇= 「剪貼板」) 打印(結果) time.sleep( 2) 除了Tk.tclError: 選擇= None',但我得到一個錯誤,說明 - 'AttributeError的:對象類型「Tk的」有沒有屬性「tclError'' – mbvee

+1

@mbvee:該錯誤消息似乎不言自明。 「Tk」的一個實例沒有「TclError」屬性。這不是我的代碼顯示。我的代碼清楚地顯示了使用tkinter模塊中的'TclError'。另外,在無限循環中絕對沒有理由調用Tk()。它只需要創建一次。 –

+0

感謝您的回覆。我錯過了進口聲明。我在文件開頭也有'從Tkinter的進口Tk'導入時間 。 – mbvee