Python t从剪贴板在文本框中粘贴图像

Python t从剪贴板在文本框中粘贴图像,python,image,tkinter,clipboard,Python,Image,Tkinter,Clipboard,我正在尝试粘贴从剪贴板获取图像,并将其粘贴到tkinter中的文本框/标签中。我的代码如下 # page4 buttons and functions f7 = Frame(page4) f7.grid(row=0, column=0, sticky='NESW') f8 = Frame(page4) f8.grid(row=0, column=0, columnspan=2, sticky='NESW') tb8 = Label(f7, width=82) tb8.grid(row=0,

我正在尝试粘贴从剪贴板获取图像,并将其粘贴到tkinter中的文本框/标签中。我的代码如下

# page4 buttons and functions

f7 = Frame(page4)
f7.grid(row=0, column=0, sticky='NESW')

f8 = Frame(page4)
f8.grid(row=0, column=0, columnspan=2, sticky='NESW')

tb8 = Label(f7, width=82)
tb8.grid(row=0, column=0, sticky='NESW')

tb9 = Text(f7, width=30)
tb9.grid(row=0, column=1, sticky='NESW')


 def imgps():
   try:
    image = root.selection_get(selection='CLIPBOARD')
    img = ImageTk.PhotoImage(Image.open(image))
    tb8.config(page4, image=img)
    tb8.clipboard_clear()
  except:
    messagebox.showinfo(message="Clipboard is Empty.")

 pbtn11 = Button(f8, text="IMAGE", activebackground="lavender",
            activeforeground="RoyalBlue", bd="5", bg="aquamarine2",
            command=imgps, fg="purple", font=('arial', 10, 'bold'))
 pbtn11.grid(row=0, column=0, sticky='NESW')

预期区域上没有显示任何内容,也没有显示任何错误。但是,从那里我关闭了应用程序。消息框出现了。似乎是奇怪的编码。有人能帮忙吗。

这里有一个简单的例子,可以向标签添加图像

请记住,您需要确保保存对图像的引用,否则您将无法在应用程序中看到图像

更新:

我相信这个更新的答案应该对你有用。代码将尝试使用
PIL
中的
ImageGrab
方法从剪贴板抓取图像(如果有),然后将图像保存到临时文件夹中。然后,我们将该图像加载到标签,然后从临时文件夹中删除该图像

import tkinter as tk
import os
from tkinter import messagebox
from PIL import ImageTk, ImageGrab

root = tk.Tk()
tb8 = tk.Label(root, width=82)
tb8.grid(row=0, column=0, sticky='nsew')

def imgps():
    try:
        temp_path = "./TempImage/some_image.gif" # Whatever temp path you want here
        im = ImageGrab.grabclipboard() # Get image from clipboard
        im.save(temp_path) # save image to temp folder
        load_for_label = ImageTk.PhotoImage(file=temp_path) # load image from temp folder
        tb8.config(image=load_for_label) # set image to label
        tb8.image = load_for_label # save reference to image in memory
        tb8.clipboard_clear() # clear clipboard
        os.remove(temp_path) # delete temp file
    except:
        messagebox.showinfo(message="Clipboard is Empty.")

pbtn11 = tk.Button(root, text="IMAGE", command=imgps)
pbtn11.grid(row=1, column=0, sticky='nsew')

root.mainloop()

我确实尝试了几种直接从剪贴板加载图像的方法,但我一直遇到错误。因此,我的上述解决方案可能不是100%实现这一点的最快方法,但应该可以很好地工作。

您无法将图像粘贴到文本框中。但是,您可以将其添加到标签。对标签执行此操作的正确方法不是尝试插入它,而是将图像指定给标签的图像属性
label\u name.config(image=image\u对象)
。您还需要保存对图像的引用。好的,但这应该在函数
imgps
内部还是外部。我使用的是一个变量img,但不能在函数外使用。我试过在函数内部使用任何东西都不会显示相同的状态。它可以是in或out。这只取决于你想要完成什么。只要标签已经存在,就可以使用
config()
方法。也可以在定义标签期间创建图像对象并将其指定给标签
tb8=Label(f7,width=82,image=image\u object)
。当我尝试将外部函数用作
tb8=Label(f7,width=82,image=img)
。它将错误作为未解析的引用。这将发生。在创建标签之前,还需要在全局命名空间中定义图像。我只是简单地说,这可以在功能或全球范围内完成。我面临的主要问题是路径问题。我正在尝试从剪贴板获取图像。如果您看到我的函数,我正在尝试将剪贴板图像粘贴到标签中。另外,请再次查看代码。我做了相应的修改。有趣的是,每次我尝试从函数中粘贴图像时。消息框在大约4秒后出现,告诉我剪贴板是空的。这当然是我的一个选择。有些事情失败了。让我看看我能想出什么办法。我以前从未在图像上使用过剪贴板。谢谢!我明天会试试,现在觉得很困,会给你一个跟进。嗨!早上好,我尝试了代码,但遇到了
ImageGrab
的问题。这实际上只适用于Windows和MacOS,我的是Ubuntu。我们可以用截图代替吗。没有发现任何成功。