Python:使用tkinter从剪贴板复制而不显示窗口

时间:2014-07-03 17:12:49

标签: python python-3.x tkinter clipboard pywin32

在Windows 7上运行Python 3.4。

我需要将存储在剪贴板中的内容复制到我的python程序中的变量中。我在Stack Overflow上看过,可以用pywin32或tkinter完成。由于tkinter是python标准库的一部分,我认为这是两者中较好的,因为用户不必安装外部模块。这是在tkinter中获取剪贴板数据的代码:

import tkinter
number = tkinter.Tk().clipboard_get()

除了每次执行时弹出一个空白的tkinter窗口外,这个工作正常。

1)为什么会这样?通常tkinter在tk()。mainloop()运行之前不会显示任何内容。

2)有没有办法避免弹出这个窗口?如果没有,我猜我只会使用pywin32

8 个答案:

答案 0 :(得分:12)

  

除了每次执行时都弹出一个空白的tkinter窗口,这个工作正常。

您可以隐藏此窗口:

from tkinter import Tk
root = Tk()
root.withdraw()
number = root.clipboard_get()

答案 1 :(得分:2)

窗口由tkinter.Tk()(或其他需要窗口的元素)而不是tk().mainloop()创建。 Mainloop使程序保持正常运行。

也许尝试Pyperclipclipboard

答案 2 :(得分:1)

这是一个基于this answer的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的方法的一个小缺点是它使用了一个不太理想的快速隐藏窗口,但这不应该是明显的。
此答案使用Stack Overflow问题How to copy/get an image in the clipboard with Python (I accept Tkinter for text)上原始答案中的内容。

答案 3 :(得分:1)

我遇到了同样的问题。这对我在Windows 7,python 2.7上工作。我现在只有一个窗口。

from Tkinter import *
root = Tk()
cliptext = root.clipboard_get()
lab=Label(root, text = cliptext)
lab.pack()
root.mainloop()

答案 4 :(得分:1)

AnnoyingWindow = Tk()
ClipBoard = AnnoyingWindow.clipboard_get()
AnnoyingWindow.destroy()
print(ClipBoard)

答案 5 :(得分:0)

您实际上是在没有tkinter的情况下以更简单的方式执行此操作:

import pyperclip

clipboard_content = pyperclip.paste()

答案 6 :(得分:0)

没有窗口的tkinter方式:

from tkinter import Tk


def clipboard_get():
    r = Tk()
    r.withdraw()
    return r.clipboard_get()

答案 7 :(得分:-1)

number.withdraw() #this hides the ui for the object

只需在创建TKinter对象时在开头添加此命令,它将隐藏UI。请参阅this类似问题。