在 Kivy 中将图像对象作为按钮背景传递
Posted
技术标签:
【中文标题】在 Kivy 中将图像对象作为按钮背景传递【英文标题】:Passing image object as a button background in Kivy 【发布时间】:2013-06-27 20:23:58 【问题描述】:在 Kivy 中,有没有办法将图像对象作为按钮背景传递,而不是图像文件名?
button.background_normal
属性只接受字符串。我想自定义图片属性,比如allow_stretch = False
。
如果成功,我如何在按钮内指定图像对齐方式,例如。让它左上对齐?
【问题讨论】:
请注意,Kivy 1.6 中不存在 allow_stretch 【参考方案1】:源只是 Button 的一个属性,正如您所指出的,它是一个字符串。你想要一个 Widget 里面有一个 Widget,这就是 Kivy 工作的基本方式。所以只需按原样添加图像。一点定位就可以完成剩下的工作。
你必须小心定位。确保它位于可见部分并且没有任何东西覆盖它。我在按钮后使用标签,因为它具有透明颜色,因此您可以尝试使用它。例如,如果您的定位错误(尝试x:0 y:0
),您可以看到按钮转到标签区域的左下角。
我使用的图片是Kivy logo:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
Builder.load_string("""
<ButtonsApp>:
orientation: "vertical"
Button:
text: "B1"
Image:
source: 'kivy.png'
y: self.parent.y + self.parent.height - 250
x: self.parent.x
size: 250, 250
allow_stretch: True
Label:
text: "A label"
""")
class ButtonsApp(App, BoxLayout):
def build(self):
return self
if __name__ == "__main__":
ButtonsApp().run()
【讨论】:
谢谢,效果很好。我不知何故认为小部件只能添加到布局小部件中;我不知道它们可以添加到任何其他小部件之上。 我认为这个例子应该包含在kivy.org/docs/api-kivy.uix.button.html,因为现在看起来设置背景图像的唯一方法是background_normal
。
为什么pos_hint: "center_x": 0.5, "center_y": 0,5
在Ìmage
下不起作用?
...因为pos_hint
只在布局内工作。您必须在 Button 和 Image 之间添加一个中间层(尝试FloatLayout
)才能激活pos_hint
和size_hint
属性。不用担心在小部件中添加小部件;它们在 Kivy 中非常便宜,这实际上是使用它的正确方法。
有没有办法在没有 .kv 标记的情况下做到这一点,也就是说,在纯 (Kivy) Python 中?【参考方案2】:
除了toto_tico的回答,可以将按钮中心的图片定位为:
Button:
id: myButton
Image:
source: "./buttonImage.PNG"
center_x: self.parent.center_x
center_y: self.parent.center_y
【讨论】:
【参考方案3】:你可以使用
按钮:
id:mybutton
background_down: "bgdown.png"
background_normal: "bg.png"
【讨论】:
以上是关于在 Kivy 中将图像对象作为按钮背景传递的主要内容,如果未能解决你的问题,请参考以下文章
在 kivy python 中将按钮的背景更改为不同的形状和样式,如阴影效果等
.gif 图像作为源代码在 Windows kivy 程序中运行良好。通过 kivy Launcher 运行显示 gif 图像的背景