Сценарий ниже делает, если я скопирую ссылку, подобную этой: http://urlshortener.io/s/1234rIHs/?s=https%3A%2F%2Fexample.com%2Fsome_content%2F
, она изменится на example.com/some_content/
, если я нажму кнопку.
from tkinter import *
from urllib import parse
from tkinter import Tk
root = Tk()
root.title("Slicer")
root.geometry('304x70')
lbl = Label(root, text="Link")
lbl.pack()
def clicked():
clip = root.clipboard_get()
clip = parse.unquote(clip)[45:]
root.clipboard_clear()
root.clipboard_append(clip)
lbl.configure(text= clip)
btn = Button(root, text="Slice", command=clicked, height = 3, width = 40)
btn.pack()
root.mainloop()
Я пытаюсь сделать этот скриптзапустить в фоновом режиме и прослушать действие «копировать», а затем, если я скопирую некоторый текст в браузере, он автоматически отрежет только что скопированный текст, и мне не нужно будет нажимать кнопку.
Iвидел ответ Брайана Окли в этом вопросе https://codereview.stackexchange.com/questions/184570/clipboard-detector-in-pythons
Теперь я пытаюсь использовать его код с моим:
from tkinter import *
from urllib import parse
from tkinter import Tk
root = Tk()
root.title("Slicer")
root.geometry('304x70')
lbl = Label(root, text="Link")
lbl.pack()
def check_clipboard(window):
clip = root.clipboard_get()
clip = parse.unquote(clip)[45:]
root.clipboard_clear()
root.clipboard_append(clip)
lbl.configure(text= clip)
def run_listener(window, interval):
check_clipboard(window)
root.after(interval, run_listener, window, interval)
run_listener(root, 500)
root.mainloop()
, но я получаю ошибки:

Traceback (most recent call last):
File "C:\Users\leka.12\Desktop\lister.py", line 28, in <module>
run_listener(root, 500)
File "C:\Users\leka.12\Desktop\lister.py", line 25, in run_listener
check_clipboard(window)
File "C:\Users\leka.12\Desktop\lister.py", line 16, in check_clipboard
clip = root.clipboard_get()
File "C:\Users\leka.12\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 804, in clipboard_get
return self.tk.call(('clipboard', 'get') + self._options(kw))
_tkinter.TclError: CLIPBOARD selection doesn't exist or form "STRING" not defined
>>>
Я также нашел это Ошибка tkinter при копировании содержимого из буфера обмена в Python
, но это, похоже, не имеет ничего общего с моимскрипт:
try:
selection = r.selection.get(selection="CLIPBOARD")
except tk.TclError:
selection = None