Python tkinter 无法使用空剪贴板

Python tkinter not working with empty clipboard

这是我获取剪贴板文本的代码:

from tkinter import Tk

def check_clipboard():
    r = Tk()
    r.withdraw()
    result = r.selection_get(selection="CLIPBOARD")
    return result

但是有个问题。如果 clipboard 为空,则脚本不是 运行。错误是这样的:

Traceback (most recent call last):
  File "C:\Users\Mustafa\PycharmProjects\pythonProject\youtube\MyScript.py", line 15, in <module>
    result0 = r0.selection_get(selection="CLIPBOARD")
  File "C:\Users\Mustafa\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 970, in selection_get
    return self.tk.call(('selection', 'get') + self._options(kw))
_tkinter.TclError: CLIPBOARD selection doesn't exist or form "STRING" not defined

我试过了,但我没有弄清楚这个错误。我尝试用 r.clipboard_append("hello") 附加一些字符串,但它再次不起作用。我该如何解决这个问题?添加一些字符串或检查剪贴板是否为空。

剪贴板为空时,出现TclError,你确实需要try/catch它:

可能是这样的:

import tkinter as tk
from tkinter import TclError


def check_clipboard():
    root.withdraw()
    try:
        result = root.selection_get(selection="CLIPBOARD")
    except TclError:
        # handle the error the way you see fit.
        result = 'the clipboard was empty'
    return result

root = tk.Tk()
print(check_clipboard())

清除剪贴板,请使用root.clipboard_clear()

没有选项可以检查剪贴板是否为空,但是一个小函数可以做到这一点:

def is_clipboard_empty():
    try:
        root.selection_get(selection="CLIPBOARD")
    except TclError:    # error raised when empty
        return True
    return False    

More info

您可以在行 r.selection_get(...) 上应用 try/except 来捕获异常,如下所示:

import tkinter as tk

def check_clipboard():
    r = tk.Tk()
    r.withdraw()
    try:
        return r.selection_get(selection="CLIPBOARD")
        #return r.clipboard_get()
    except tk.TclError:
        return None
    finally:
        r.destroy()

注1:可以使用r.clipboard_get(),与r.selection_get(selection="CLIPBOARD")相同。

注意 2:我添加了 finally 块,以防您不想在函数后使用 Tk() 的实例。否则,删除 finally 块。