繁体   English   中英

Tkinter将图像从剪贴板粘贴到文本框中

[英]Tkinter paste image in textbox from 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, 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')

没有出现在预期的区域,也没有显示任何错误。 但是,从那里我关闭了应用程序。 消息框出现。 好像是奇怪的编码。 有人可以帮忙吗?

这是将图像添加到标签的简单示例。

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

更新:

我相信这个最新的答案应该为您工作。 如果有的话,代码将尝试使用PILImageGrab方法从剪贴板中抓取图像,然后将图像保存到临时文件夹中。 然后,我们将该图像加载到标签上,然后从temp文件夹中删除该图像。

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%实现此目标的最快方法,但应该可以很好地工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM