Ответ 1
Окно создается tkinter.Tk()
(или другими элементами, которые нуждаются в окне), а не tk().mainloop()
. Mainloop поддерживает работу программы.
Запуск Python 3.4 в Windows 7.
Мне нужно скопировать то, что хранится в буфере обмена, в переменную в моей программе python. Я видел в Qaru то, что можно сделать либо с pywin32, либо с tkinter. Поскольку tkinter является частью стандартной библиотеки python, я решил, что это было лучше, поскольку пользователю не нужно было устанавливать внешний модуль. Здесь код для получения данных буфера обмена в tkinter:
import tkinter
number = tkinter.Tk().clipboard_get()
Это отлично работает, за исключением того, что пустое окно tkinter появляется каждый раз, когда это выполняется.
1) Почему это происходит? Обычно tkinter ничего не отображает до тех пор, пока tk() не будет запущен mainloop().
2) Есть ли способ избежать появления этого окна? Если нет, я думаю, я просто использую pywin32
Окно создается tkinter.Tk()
(или другими элементами, которые нуждаются в окне), а не tk().mainloop()
. Mainloop поддерживает работу программы.
Это отлично работает, за исключением того, что пустое окно tkinter появляется каждый раз, когда это выполняется.
Вы можете скрыть это окно:
from tkinter import Tk
root = Tk()
root.withdraw()
number = root.clipboard_get()
Здесь функция Python, основанная на этот ответ, который заменяет/возвращает текст буфера обмена с помощью Tkinter, встроенный модуль Python, без отображения окна.
def use_clipboard(paste_text=None):
import tkinter # For Python 2, replace with "import Tkinter as tkinter".
tk = tkinter.Tk()
tk.withdraw()
if type(paste_text) == str: # Set clipboard text.
tk.clipboard_clear()
tk.clipboard_append(paste_text)
try:
clipboard_text = tk.clipboard_get()
except tkinter.TclError:
clipboard_text = ''
r.update() # Stops a few errors (clipboard text unchanged, command line program unresponsive, window not destroyed).
tk.destroy()
return clipboard_text
Небольшим недостатком использования этого метода на основе Tkinter является то, что он использует быстро скрытое окно, которое не является идеальным, но это не должно быть заметно.
Этот ответ использует контент из моего первоначального ответа на вопрос о переполнении стека Как скопировать/получить изображение в буфер обмена с помощью Python (я принимаю Tkinter для текста).
У меня была та же проблема. Это работало для меня на Windows 7, python 2.7. Теперь я получаю только одно окно.
from Tkinter import *
root = Tk()
cliptext = root.clipboard_get()
lab=Label(root, text = cliptext)
lab.pack()
root.mainloop()
AnnoyingWindow = Tk()
ClipBoard = AnnoyingWindow.clipboard_get()
AnnoyingWindow.destroy()
print(ClipBoard)
Вы действительно делаете это без tkinter
и гораздо более простым способом:
import pyperclip
clipboard_content = pyperclip.paste()
Путь tkinter без окна:
from tkinter import Tk
def clipboard_get():
r = Tk()
r.withdraw()
return r.clipboard_get()
number.withdraw() #this hides the ui for the object
Просто добавьте эту команду в начале, когда вы создаете свой объект TKinter, и он скроет интерфейс. См. этот аналогичный вопрос.