Python 3-如何使用 TKINTER 从网络检索图像并在 GUI 中显示?
我想要一个功能,当单击按钮时,它将使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不使用 python 3,但我可以给出适用于 python 2.5+ 的答案。我假设代码在 python 3 上的工作方式几乎相同。
开始之前,我们需要导入 Tkinter 并创建根窗口:
接下来,使用 urllib 下载图像:
您现在在变量 < 中拥有图像的二进制数据代码>raw_data。 Tkinter 接受
data
选项,但不幸的是您无法向其提供此原始数据。它期望数据被编码为 base64。这很容易做到:现在我们有了图像,是时候将其放在屏幕上了:
您现在应该在屏幕上看到该图像。
以上仅适用于 .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:
Next, to download the image using urllib:
You now have the binary data for the image in the variable
raw_data
. Tkinter accepts adata
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:Now that we have an image, time to put it on the screen:
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 thePhotoImage
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