tkinter.TclError: Выбор CLIPBOARD не существует или форма "STRING" не определена - PullRequest
0 голосов
/ 17 октября 2018

Сценарий ниже делает, если я скопирую ссылку, подобную этой: 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()

, но я получаю ошибки:

enter image description here

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...