2017-04-10 90 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