【问题标题】:How to display an image from web?如何显示来自网络的图像?
【发布时间】:2011-04-27 02:32:06
【问题描述】:

我用python写了这个简单的脚本:

import gtk

window = gtk.Window()
window.set_size_request(800, 700)

window.show()
gtk.main()

现在我想在此窗口中加载来自网络(而不是来自我的 PC)的图像,如下所示:

http://www.dailygalaxy.com/photos/uncategorized/2007/05/05/planet_x.jpg

我该怎么做?

附:我不想下载图片!我只想从 URL 加载图像。

【问题讨论】:

  • "P.S. 我不想下载图片!我只想从 URL 加载图片。"这是一个矛盾。 “加载”==“下载”。您对网络上的图像唯一的操作就是下载。没有其他选择。你想做什么?

标签: python gtk pygtk


【解决方案1】:

这会从 url 下载图像,但会将数据写入 gtk.gdk.Pixbuf 而不是文件:

import pygtk
pygtk.require('2.0')
import gtk
import urllib2

class MainWin:

    def destroy(self, widget, data=None):
        print "destroy signal occurred"
        gtk.main_quit()

    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect("destroy", self.destroy)
        self.window.set_border_width(10)
        self.image=gtk.Image()
        response=urllib2.urlopen(
            'http://www.dailygalaxy.com/photos/uncategorized/2007/05/05/planet_x.jpg')
        loader=gtk.gdk.PixbufLoader()
        loader.write(response.read())
        loader.close()        
        self.image.set_from_pixbuf(loader.get_pixbuf())
        # This does the same thing, but by saving to a file
        # fname='/tmp/planet_x.jpg'
        # with open(fname,'w') as f:
        #     f.write(response.read())
        # self.image.set_from_file(fname)
        self.window.add(self.image)
        self.image.show()
        self.window.show()

    def main(self):
        gtk.main()

if __name__ == "__main__":
    MainWin().main()

【讨论】:

    【解决方案2】:
    1. 下载图片。谷歌关于如何使用 python 下载文件,有易于使用的库。

    2. 将图像加载到小部件中。了解如何在 GTK 中显示图像。

    抱歉,没有详细说明,但答案会很长,您最好还是在其他地方阅读这些主题。

    希望对你有帮助!

    【讨论】:

    • 我会使用 GTK 而不是 Python 来下载它,否则可以。
    • 我不想下载图片!我只想从 URL 加载图像:)
    • @xRobot:您认为从所涉及的 URL 加载图像究竟是什么?
    • @xRobot: 提示 -- 以“d”开头并以“ownloading it”结尾:D
    • 如果您想在您的计算机上实际显示图像,您必须下载它。可以这样想:URL 是指向事物的名称。如果你想展示那个东西,你需要得到那个名字背后的数据。这就是 Web 浏览器所做的事情,也是显示图像所必须做的事情。或者,您可以显示指向它的链接,这只是名称。
    【解决方案3】:

    这是一个使用 WebKit 的简单脚本:

    #!/usr/bin/env python
    import gtk
    import webkit
    
    window = gtk.Window()
    window.set_size_request(800, 700)
    webview = webkit.WebView()
    window.add(webview)
    window.show_all()
    
    webview.load_uri('http://www.dailygalaxy.com/photos/uncategorized/2007/05/05/planet_x.jpg')
    
    gtk.main()
    

    但请注意,这实际上会下载图像。

    【讨论】:

    • 还需要pywebkitgtk,这个要求不小。
    • 我想你也可以使用 libsoup,但我认为这最适合 OP 的需求 ;-)
    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多