获取剪贴板文本时发生获取非类型错误

2024-04-25 12:59:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在windows(7)中,当ICtrl+C任何文本时获取此错误:

Traceback (most recent call last): File "T:\Desktop\nutty.py", line 45, in selected_word = get_clip() File "T:\Desktop\nutty.py", line 30, in get_clip clip = str(text.value.decode("utf-8")) AttributeError: 'NoneType' object has no attribute 'decode'

from tkinter import Tk
import ctypes, time, os

def set_clip(string=""):
    r = Tk()
    r.withdraw()
    r.clipboard_clear()
    r.clipboard_append(string)
    print("Set data:"+string)
    r.destroy()

def clr_clip():
    r = Tk()
    r.withdraw()
    r.clipboard_clear()
    r.destroy()

def get_clip():
    global clip
    CF_TEXT = 1

    kernel32 = ctypes.windll.kernel32
    user32 = ctypes.windll.user32

    user32.OpenClipboard(0)
    if user32.IsClipboardFormatAvailable(CF_TEXT):
        data = user32.GetClipboardData(CF_TEXT)
        data_locked = kernel32.GlobalLock(data)
        text = ctypes.c_char_p(data_locked)
        clip = str(text.value.decode("utf-8"))
        kernel32.GlobalUnlock(data_locked)
    else:
        clip = "null"
    user32.CloseClipboard()
    return clip

fps=10
previous=""
previous_set_word=""
end=False
clr_clip()
while not end:
    vocab = open("vocab.txt", 'r').readlines()

    selected_word = get_clip()
    if selected_word != previous:
        print("Data:"+selected_word)
        for line in range(len(vocab)):
            word = vocab[line].strip("\n")
            if selected_word == word and not vocab[line] == previous_set_word:
                set_clip(vocab[line+1].strip("\n"))
                previous_set_word = vocab[line+1]
    previous = selected_word
    time.sleep(1/fps)

我不知道为什么会这样,因为我被告知,这将得到数据罚款!你知道吗


Tags: textindatagetcliplinectypesword