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

11 投票
9 回答
24826 浏览
提问于 2025-04-18 12:01

我在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了。

9 个回答

1

我也遇到过同样的问题。在Windows 7和Python 2.7上,这个方法对我有效。现在我只会看到一个窗口。

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

当然可以!请看下面的内容:

在编程中,有时候我们需要让程序做一些事情,比如读取文件、处理数据或者与用户互动。这些操作通常是通过一些特定的指令来实现的。比如,读取文件的指令可以告诉程序去找一个文件,然后把里面的内容拿出来。

此外,程序还可以通过条件判断来决定下一步该做什么。比如,如果用户输入的是正确的密码,程序就可以让用户进入系统;如果输入错误,程序就会提示用户再试一次。

总之,编程就像是在给计算机下指令,让它按照我们的想法去做事情。希望这些解释能帮助你更好地理解编程的基本概念!

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

这里有一个基于 这个答案 的Python函数,它使用内置的Python模块 Tkinter 来替换或返回剪贴板上的文本,而且不会显示窗口。

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问题中原始答案的内容,问题是 如何用Python复制/获取剪贴板中的图像(我接受使用Tkinter处理文本)

21

这个方法运行得很好,但每次执行时都会弹出一个空白的 tkinter 窗口。

你可以把这个窗口隐藏起来:

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

窗口是通过 tkinter.Tk() 创建的(或者其他需要窗口的元素),而不是通过 tk().mainloop()。主循环(mainloop)是让程序持续运行的。

你可以试试 Pyperclip 或者 clipboard

撰写回答