当前位置: 首页 > 知识库问答 >
问题:

如何仅使用标准Python库向Python 2.7中的Tkinter添加URL图像?

权兴为
2023-03-14

我已经看到了许多例子,如何在Tkinter中使用图像URL显示图像,但这些例子都不适用于我,即Tkinter。

import urllib 
from Tkinter import *
import io
from PIL import Image, ImageTk


app = Tk()
app.geometry("1000x800")

im = None  #<-- im is global

def search():
    global im  #<-- declar im as global, so that you can write to it
               # not needed if you only want to read from global variable.
    tx1get = tx1.get()
    Label(app, text="You Entered: \"" + tx1get + "\"").grid(row=1, column=0)
    fd = urllib.urlopen("http://ia.media-imdb.com/images/M/MV5BMTc2MTU4ODI5MF5BMl5BanBnXkFtZTcwODI2MzAyOA@@._V1_SY317_CR7,0,214,317_AL_.jpg")
    imgFile = io.BytesIO(fd.read())
    im = ImageTk.PhotoImage(Image.open(imgFile))
    image = Label(app, image = im, bg = "blue")
    image.grid(row=2, column=0)

tx1=StringVar()
tf = Entry(app, textvariable=tx1, width="100")
b1 = Button(app, text="Search", command=search, width="10")
tf.grid(row=0, column=0)
b1.grid(row=0, column=1)

app.mainloop()

当我运行这个我得到的错误"没有模块名称PIL"在这一个:

from io import BytesIO
import urllib
import urllib.request
import tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
url = "http://imgs.xkcd.com/comics/python.png"
with urllib.request.urlopen(url) as u:
    raw_data = u.read()
im = Image.open(BytesIO(raw_data))
image = ImageTk.PhotoImage(im)
label = tk.Label(image=image)
label.pack()
root.mainloop()

我得到了“无模块名请求”,几乎所有的示例都使用了PIL模块,但我无法让它们工作,因为Python 2.7无法识别其中的许多模块。我需要显示一个图像作为评估的一部分,虽然我们可以导入诸如Tkinter之类的东西,但该文件需要运行,而无需从标准Python库之外添加模块。

同样值得注意的是,我甚至不能导入“tkinter”。它会说没有名为“tkinter”的模块,因为它需要以大写字母“T”开头。

因此,我的问题是:

>

  • PIL是否需要我安装其他软件/库

    没有大写字母T的"tkinter"的导入不起作用,因为我使用的是Python 2.7吗?

    使用Python 2.7如何从URL在Tkinter窗口中显示图像

  • 共有1个答案

    双子民
    2023-03-14

    这个工作原理,在windows上使用python 2.7:

    from io import BytesIO
    import Tkinter as tk
    import urllib  # not urllib.request
    from PIL import Image, ImageTk
    
    root = tk.Tk()
    url = "http://imgs.xkcd.com/comics/python.png"
    
    u = urllib.urlopen(url)
    raw_data = u.read()
    u.close()
    
    im = Image.open(BytesIO(raw_data))
    image = ImageTk.PhotoImage(im)
    label = tk.Label(image=image)
    label.pack()
    root.mainloop()
    

    回答您的问题:

    1. 您需要安装PIL(它不是Python 2.7的标准)。
    2. 是的,你需要在Python 2.7中导入Tkintertkinter是用于Python 3. x
    3. 您可以使用上面的代码(如果您安装PIL)。

    还有,

    1. 在Python2.7中,您需要urllib,而不是urllib。请求
    2. 似乎您不能将与….一起使用。。。。在urllib中以fname的形式打开(x),因此需要显式打开和关闭文件
     类似资料:
    • 问题内容: 我在image_creator中有图像创建代码。 用于图像输出的文件是image.php并具有以下代码 当我运行image.php时,我只会得到一个空白页。为什么会这样呢? 问题答案: 使用它向图像添加文本(从PHP for Kids复制)

    • 问题内容: 我有许多固定大小的图像(例如500 * 500)。我想编写一个python脚本,将其调整为固定大小(例如800 * 800),但将原始图像保持在中心,并用固定颜色(例如黑色)填充多余的区域。 我正在使用PIL。我现在可以使用该功能调整图像的大小,但这会改变纵横比。有什么办法吗? 问题答案: 您可以创建具有所需新尺寸的新图像,然后将旧图像粘贴到中间,然后保存。如果需要,可以覆盖原始图像(

    • 那么我该如何安装这些库来尝试新的项目呢?谢谢!

    • 问题内容: 我正在将Swift代码集成到一个大型的Objective-C项目中,但是当我的Swift代码引用Objective-C类时,我遇到了问题。例如,假设我有: 一个叫做Objective-C的类 一个叫做Objective-C的类 我声明了一个Swift类,如下所示: 如果现在尝试通过导入Objective- C代码来使用此类,则对于和都会出现未定义的符号错误。 我可以通过导入以及在导入之

    • 我不确定是有什么明显的东西逃过了我的视线,还是根本不可能,但我正试图用docker hub的图像组成一个完整的应用程序堆栈。 其中之一是mysql,它支持通过卷添加自定义配置文件并运行。装载目录中的sql文件。 但是,我在运行docker compose的机器上有这些文件,而不是在主机上。在运行entrypoint/cmd之前,是否无法指定要从本地计算机复制到容器中的文件?我真的需要为这种情况创建

    • 我有工作代码将图像插入到DOCX模板中(使用docxtpl提供的Jinja模板格式),但是当图像插入到文档正文时,图像无法在标题中呈现。文档中的插入点显示消息“read error”。