繁体   English   中英

Kivy 图像按钮拉伸

[英]Kivy image button stretching

我正在尝试制作带有图像的按钮。 但是图像被拉伸了。 有没有办法让它成为“固定位置”,所以每当分辨率改变时,它就不会被拉伸(使用python)?

self.add_widget(Button(background_normal=('Image.png'),size_hint_x=(0.5),size_hint_y=(0.3),pos_hint={"x":0.3, "top":0.7}))

通过使用 Kivy Behaviors 模块,您可以在这里做另一件事。

在你的 python 文件中:

from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.image import Image

class ImageButton(ButtonBehavior, Image):
    pass

self.add_widget(ImageButton(source=('Image.png'),size=(200,200), size_hint=(None,None),pos_hint={"x":0.3, "top":0.7}))

ImageButton 现在可以访问 Button 属性(如 'on_press' 方法)以及默认为 True 和 False 的 Image 属性(包括 'keep_ratio' 和 allow_stretch),这就是您在本示例中想要的。

这对我有用。

self.add_widget(Button(background_normal=('Image.png'),size=(200,200), size_hint=(None,None),pos_hint={"x":0.3, "top":0.7}))

您当然可以将(200, 200)更改为您需要的任何尺寸。

只是为了稍微充实答案,我最终得到了这个:

from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.image import Image

class ImageButton(ButtonBehavior, Image):
    def __init__(self,background_normal=None,background_down=None,**kwargs):
        super(ImageButton,self).__init__(**kwargs)
        self.border = (0,0,0,0)
        if background_normal is None:
            self.background_normal = self.source
        else:
            self.background_normal = background_normal
        self.background_down=background_down

self.add_widget(ImageButton(source=('Image.png'), size_hint=(0.1,0.1),pos_hint={"x":0.3, "top":0.7}))

它完成了一些事情。 由于它是可变分辨率所需的缩放性能,因此按钮大小可能应该是 size_hint 而不是绝对大小。 否则,对于某些分辨率,硬编码的绝对大小最终会变得太大或太小。 其次,将border属性归零通常是更好的默认设置,以避免扭曲按钮图像。 最后,将background_normal/down添加到构造函数会稍微整理代码,因为它们在 ButtonBehavior 构造函数中不可用。

但是,请注意,通过这种安排,按钮的最终布局大小有两种可能的结果,具体取决于父布局的哪个维度是限制大小。 如果这不可接受,但仍需要 size_hint 方法,则有必要为按钮分配一个控制维度(x 或 y),并使用回调将大小从控制维度复制到依赖do_layout() 时的尺寸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM