我在一个可调整大小的窗口中有一个Gtk Image小部件,并且存储了我想要填充GtkImage的图像的参考GdkPixBuf.

我可以使用此方法缩放GdkPixBuf以填充GtkImage小部件:

def update_image(self,widget=None,data=None):
    # Get the size of the source pixmap
    src_width,src_height = self.current_image.get_width(),self.current_image.get_height()

    # Get the size of the widget area
    widget = self.builder.get_object('image')
    allocation = widget.get_allocation()
    dst_width,dst_height = allocation.width,allocation.height

    # Scale preserving ratio
    scale = min(float(dst_width)/src_width,float(dst_height)/src_height)
    new_width = int(scale*src_width)
    new_height = int(scale*src_height)
    pixbuf = self.current_image.scale_simple(new_width,new_height,gtk.gdk.INTERP_BILINEAR)

    # Put the generated pixbuf in the GtkImage widget
    widget.set_from_pixbuf(pixbuf)

当我手动调用update_image时,它按预期工作.现在我希望在调整GtkImage小部件时自动进行缩放.我带来的最佳解决方案是将update_image方法绑定到窗口的configure-event GTK事件.在窗口的每次尺寸改变之后,图像确实被适当地缩放.但是我对此解决方案有两个问题:

>我只能让窗户更大.一旦图像被放大,GTK将不会让我调整窗口的大小,因为窗口不能小于其窗口小部件.我明白为什么它会这样,但我不知道如何改变这种行为.
>也许这没什么大不了的,但我更喜欢GtkImage小部件而不是顶级窗口的事件.

我很抱歉这个小问题的长期解释,我希望你能帮助我.

解决方法

我相信你可以使用小部件的 expose-event信号进行图像缩放.另外,将图像添加到可滚动容器中可以解决窗口调整大小的问题.请检查下面的示例是否适合您.
import gtk

class ScaleImage:
    def __init__(self):
        self.temp_height = 0
        self.temp_width = 0

        window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        image = gtk.Image()
        image.set_from_file('/home/my_test_image.jpg')
        self.pixbuf = image.get_pixbuf()
        image.connect('expose-event',self.on_image_resize,window)    

        Box = gtk.ScrolledWindow()
        Box.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
        Box.add(image)

        window.add(Box)
        window.set_size_request(300,300)
        window.show_all()        

    def on_image_resize(self,widget,event,window):
        allocation = widget.get_allocation()
        if self.temp_height != allocation.height or self.temp_width != allocation.width:
            self.temp_height = allocation.height
            self.temp_width = allocation.width
            pixbuf = self.pixbuf.scale_simple(allocation.width,allocation.height,gtk.gdk.INTERP_BILINEAR)
            widget.set_from_pixbuf(pixbuf)

    def close_application(self,data=None):
        gtk.main_quit()
        return False

if __name__ == "__main__":
    ScaleImage()
    gtk.main()

希望这有帮助,问候

使用(Py)GTK调整大小时自动缩放图像的更多相关文章

  1. 为什么XCode比Illustrator或Photoshop更好地缩放矢量图像?

    我尝试使用XCode的新PDF功能,基本上将图像缩放到1x,2x和3x.不幸的是我也在使用Spritekit,所以我宁愿使用SKTextureAtlases而不是资产目录.我的问题是,pdf的栅格化版本看起来比AdobeIllustrator的任何导出更好.这是一个带有示例的Imguralbum的链接.具体来说,从Illustrator导出的图像有2个方形尺寸:60px和90px.Xcode中的图像都具有相同的名称,但有两个不同的地图集:atlas@2x.atlas和atlas@3x.atlas.PDF从

  2. ios – 当我缩放时,如何关闭所有图像处理以查看实际的未修改像素?

    我有一个应用程序需要放大到足够远的图像,我可以清楚地看到图像上的单个像素.我需要看到一种颜色的清晰正方形,没有抗锯齿或其他通常有用的技术,使图像在显示器上看起来很好.我如何扼杀所有这些帮助?

  3. ios – 实现捏合/双击以缩放UIImage [复制]

    9个我正在尝试锻炼如何实现一个有捏/双击放大的UIImage.这是否可以使用标准的UIImageView?在文档中查看其他问题,必须使用UIScrollView完成?我希望实现一个全屏的图像(不大),如果图像较大,它应该将Aspect缩放到适合整个屏幕.然后,用户可以双击或捏合以放大图像.这是正确的方法是什么?

  4. ios – imagePickerController移动和缩放不起作用

    这是我的代码:我已经执行了代表们图像被拍摄,我可以看到移动和缩放框,但是当我移动它时,框返回到初始位置–喜欢它反弹.这是为什么?

  5. ios – 在滚动视图内缩放旋转图像以适合(填充)叠加矩形的帧

    UIImageView也可以在scrollView中进行缩放和平移.有4个手势事件需要考虑:>平移手势(完成):通过检测它是否被错误地平移并重置contentOffset来完成.>旋转CGAffineTransform>滚动视图缩放>调整裁剪矩形覆盖框架据我所知,我应该能够使用相同的逻辑2,3和4来调整滚动视图的zoomScale,以使图像正确匹配.如何正确计算使旋转的图像完全适合裁剪矩形所需的缩放比例?

  6. swift教程-使用UIGestureRecognizer

    swift教程-使用UIGestureRecognizer更新提示:这篇教程已经由CarolineBegbie为适配IOS8及Swift做了更新。假如你想要在你的应用中检测手势,例如点击,缩放,平移,或者旋转,用Swift和内建的UIGestureRecognizer类实现是非常容易的。UIGestureRecognizer概述在开始之前,先看一份如何使用UIGestureRecognizers以及为什么它们如此得心应手。在IOS3.0,苹果公司就开始拯救UIGestureRecognizer类!使用UI

  7. android图像视图缩放动画

    我想知道如何缩放徽标的动画并移动其位置?我有一个if语句运行一些检查,然后当它完成时,我希望它缩小图像视图(徽标)并将其向上移动.继承我的布局继承我的java解决方法您可以通过在AnimationSet中一起应用ScaleAnimation和TranslateAnimation来实现

  8. android – 将图像缩放到从手机拍摄的不同可绘制文件夹中,以用作标题图像

    你好,我从Nexus5手机上拍了一些照片.我想使用一个作为加载到imageview的标题.但是,我不确定缩放和drawable-xhdi,drawable-xxhdi等,它应该进入.我目前的图片是:我有gimp照片编辑工具,我可以压缩成一个png文件来减小大小.但我不知道如何才能让图片在其他屏幕密度上看起来更好看.我必须将哪个可绘制文件夹放入?

  9. android – 如何放大高分辨率的位图?

    我正在尝试使用TouchImageView实现图像查看器.>TouchImageView放置在片段中.>我为这个TouchImageView设置了一个大图像,.>然后我捏放大图像,它以低分辨率显示.但是,我想在放大时显示高分辨率图像,如Androidgallery应用程序.这该怎么做?

  10. android图像视图大小不随图像缩放

    我有以下android布局:图像缩小了很多,但由于保持纵横比,它只占用屏幕的上半部分.问题是图像视图本身具有原始高度,它占据整个屏幕并且文本从不显示.有没有办法让图像视图的大小与图像的缩放大小完全匹配?

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部