Как автоматизировать parse.unquote (), .clipboard_append () и т. Д. В Python - tkinter

1

Я пытаюсь сделать слайсер ссылки, который автоматически нарезает и скопирует отрезанный вывод ссылки сразу после того, как я вставил его на txt = Entry(window,width=50) не нажимая кнопку.

Когда я вставляю ссылку примерно так: http://url.io/s/1234abcd/?s=https%3A%2F%2Fexample.com%2Fsome_contens%2F тогда это станет: example.com/some_contents/

В настоящее время код ниже - это то, что я использую, но мне еще нужно нажать кнопку "slice", прежде чем "разрезать" и "копировать".

from tkinter import *
from urllib import parse
from tkinter import Tk

window = Tk()

window.title("Link Slicer")

window.geometry('344x50')

lbl = Label(window, text="Link")

lbl.grid(column=0, row=1)

txt = Entry(window,width=50)

txt.grid(column=0, row=0)

def clicked():

    sliced = txt.get()

    sliced = parse.unquote(sliced)

    lbl.configure(text= sliced[36:])

    r = Tk()
    r.withdraw()
    r.clipboard_clear()
    r.clipboard_append(sliced[36:])
    r.update()

btn = Button(window, text="Slice", command=clicked)

btn.grid(column=1, row=0)



window.mainloop()

Я сделал этот код ниже, чтобы попытаться автоматизировать "нарезку" и "копирование" сразу после вставки ссылки в txt = Entry(window,width=50) без нажатия кнопки (которая не работает):

from tkinter import *
from urllib import parse
from tkinter import Tk

window = Tk()

window.title("Link Slicer")

window.geometry('344x50')

lbl = Label(window, text="Link")

lbl.grid(column=0, row=1)

txt = Entry(window,width=50)

txt.grid(column=0, row=0)


sliced = txt.get()              // 1. automatically get what in txt = Entry(window,width=50)

sliced = parse.unquote(sliced)  // 2. auto-slice


r = Tk()                           }
r.withdraw()                       }
r.clipboard_clear()                } // 3. auto-copy
r.clipboard_append(sliced[36:]).   }
r.update()                         }


window.mainloop()
  • 0
    Кстати, вы не должны вызывать Tk() более одного раза. Этот призыв не просто создать корневое окно, он также создает экземпляр интерпретатора Tcl, так как Брайан объясняет здесь .
  • 0
    Вы хотите, чтобы clicked операция выполнялась автоматически при каждом изменении содержимого записи? Будете ли вы когда-либо вставлять полный URL-адрес в эту запись, или вы также хотите иметь возможность вводить URL-адреса?
Показать ещё 1 комментарий
Теги:
tkinter

1 ответ

0
Лучший ответ

Поскольку вы всегда хотите работать с содержимым буфера обмена, нет необходимости даже вставлять клип в запись. Вы можете просто захватить клип, трансформировать его и вернуть обратно в буфер обмена. Я включил запись, чтобы отобразить результат, но это не обязательно.

import tkinter as tk
from urllib import parse

root = tk.Tk()
root.title("Link Slicer")
root.geometry('344x50')
root.attributes("-topmost", True)

def clicked():
    clip = root.clipboard_get()
    clip = parse.unquote(clip)[36:]

    root.clipboard_clear()
    root.clipboard_append(clip)
    entry_text.set(clip)

entry_text = tk.StringVar()
txt = tk.Entry(root, textvariable=entry_text, width=50)
txt.pack()

btn = tk.Button(root, text="Slice", command=clicked)
btn.pack()

root.mainloop()

Когда я копирую образец URL из вашего вопроса и нажимаю кнопку "Слайс", я получаю этот результат, отображаемый в записи, и копируется в буфер обмена. Обратите внимание, что я не вставлял URL-адрес в запись, я просто нажал кнопку.

example.com/some_contens/

Я включил root.attributes("-topmost", True) чтобы заставить окно оставаться выше других окон, потому что я считаю, что это удобно для такого инструмента.

Как я уже упоминал в комментариях, вы не должны вызывать Tk() несколько раз, потому что каждый вызов запускает новый экземпляр интерпретатора Tcl, что может привести к запутанному поведению (и это пустая трата ресурсов).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню