Python 3-如何使用 TKINTER 从网络检索图像并在 GUI 中显示?

发布于 2024-11-09 03:06:26 字数 1017 浏览 0 评论 0原文

我想要一个功能,当单击按钮时,它将使用 URLLIB 从网络获取图像并使用 TKINTER 将其显示在 GUI 中。

我对 URLLIB 和 TKINTER 都很陌生,所以我在做这件事时遇到了非常困难的时间。
尝试过这个,但它显然不起作用,因为它使用文本框并且只显示文本。

 def __init__(self, root):
    self.root = root
    self.root.title('Image Retrieval Program')
    self.init_widgets()


def init_widgets(self):
    self.btn = ttk.Button(self.root, command=self.get_url, text='Get Url', width=8)
    self.btn.grid(column=0, row=0, sticky='w')

    self.entry = ttk.Entry(self.root, width=60)
    self.entry.grid(column=0, row=0, sticky='e')

    self.txt = tkinter.Text(self.root, width=80, height=20)
    self.txt.grid(column=0, row=1, sticky='nwes')
    sb = ttk.Scrollbar(command=self.txt.yview, orient='vertical')
    sb.grid(column=1, row=1, sticky='ns')
    self.txt['yscrollcommand'] = sb.set

def get_url(self):
    s = urllib.request.urlretrieve("http://www.smellymonkey.com/monkeys/images/ill-monkey.gif", "dog.gif")
    tkimage = ImageTk.PhotoImage(im)
    self.txt.insert(tkinter.INSERT, s)

I want a function that, when a button is clicked, it will take an image from the web using URLLIB and display it in a GUI using TKINTER.

I'm new to both URLLIB and TKINTER, so I'm having an incredibly difficult time doing this.
Tried this, but it obviously doesn't work because it uses a textbox and only will display text.

 def __init__(self, root):
    self.root = root
    self.root.title('Image Retrieval Program')
    self.init_widgets()


def init_widgets(self):
    self.btn = ttk.Button(self.root, command=self.get_url, text='Get Url', width=8)
    self.btn.grid(column=0, row=0, sticky='w')

    self.entry = ttk.Entry(self.root, width=60)
    self.entry.grid(column=0, row=0, sticky='e')

    self.txt = tkinter.Text(self.root, width=80, height=20)
    self.txt.grid(column=0, row=1, sticky='nwes')
    sb = ttk.Scrollbar(command=self.txt.yview, orient='vertical')
    sb.grid(column=1, row=1, sticky='ns')
    self.txt['yscrollcommand'] = sb.set

def get_url(self):
    s = urllib.request.urlretrieve("http://www.smellymonkey.com/monkeys/images/ill-monkey.gif", "dog.gif")
    tkimage = ImageTk.PhotoImage(im)
    self.txt.insert(tkinter.INSERT, s)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心舞飞扬 2024-11-16 03:06:26

我不使用 python 3,但我可以给出适用于 python 2.5+ 的答案。我假设代码在 python 3 上的工作方式几乎相同。

开始之前,我们需要导入 Tkinter 并创建根窗口:

import Tkinter as tk
root = tk.Tk()

接下来,使用 urllib 下载图像:

import urllib
URL = "http://www.smellymonkey.com/monkeys/images/ill-monkey.gif"
u = urllib.urlopen(URL)
raw_data = u.read()
u.close()

您现在在变量 < 中拥有图像的二进制数据代码>raw_data。 Tkinter 接受 data 选项,但不幸的是您无法向其提供此原始数据。它期望数据被编码为 base64。这很容易做到:

import base64
b64_data = base64.encodestring(raw_data)
image = tk.PhotoImage(data=b64_data)

现在我们有了图像,是时候将其放在屏幕上了:

label = tk.Label(image=image)
label.pack()

您现在应该在屏幕上看到该图像。

以上仅适用于 .gif 图像,但其他图像格式几乎同样容易处理。最简单的方法是将原始图像数据写入磁盘(或使用 urllib 直接将数据下载到文件)并在创建 PhotoImage 对象时引用该文件。当然,这仅适用于 PhotoImage 类直接支持的图像格式。

您的另一个选择是使用 PIL(Python 图像库),它支持许多不同的图像格式。该技术大致相同,只是您必须首先创建 PIL 图像,然后将其转换为 Tkinter 可以使用的格式。有关 PIL 的更多信息,请参阅 Python 成像库手册 以及 有关 Tkinter PhotoImage 类的 effbot 文档

I don't use python 3, but I can give an answer that works in python 2.5+. I assume the code will work nearly identically on python 3.

Before we get started, we need to import Tkinter and create the root window:

import Tkinter as tk
root = tk.Tk()

Next, to download the image using urllib:

import urllib
URL = "http://www.smellymonkey.com/monkeys/images/ill-monkey.gif"
u = urllib.urlopen(URL)
raw_data = u.read()
u.close()

You now have the binary data for the image in the variable raw_data. Tkinter accepts a data option, but unfortunately you can't feed it this raw data. It expects the data to be encoded as base64. This is easy enough to do:

import base64
b64_data = base64.encodestring(raw_data)
image = tk.PhotoImage(data=b64_data)

Now that we have an image, time to put it on the screen:

label = tk.Label(image=image)
label.pack()

You should now see the image on the screen.

The above only works for .gif images, but other image formats are almost as easy to handle. The simplest method is to write the raw image data to disk (or use urllib to directly download the data to a file) and reference the file when creating the PhotoImage object. Of course, this only works for image formats directly supported by the PhotoImage class.

Your other choice is to use PIL (Python Image Library) which supports many different image formats. The technique remains roughly the same, only you must first create a PIL image, then convert it to a format usable by Tkinter. For more information about PIL consult the Python Imaging Library Handbook and also the effbot documentation on The Tkinter PhotoImage Class

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文