[英]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.