Я пытаюсь сделать слайсер ссылки, который автоматически нарезает и скопирует отрезанный вывод ссылки сразу после того, как я вставил его на 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()
Поскольку вы всегда хотите работать с содержимым буфера обмена, нет необходимости даже вставлять клип в запись. Вы можете просто захватить клип, трансформировать его и вернуть обратно в буфер обмена. Я включил запись, чтобы отобразить результат, но это не обязательно.
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, что может привести к запутанному поведению (и это пустая трата ресурсов).
Tk()
более одного раза. Этот призыв не просто создать корневое окно, он также создает экземпляр интерпретатора Tcl, так как Брайан объясняет здесь .clicked
операция выполнялась автоматически при каждом изменении содержимого записи? Будете ли вы когда-либо вставлять полный URL-адрес в эту запись, или вы также хотите иметь возможность вводить URL-адреса?