在 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_hintsize_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中单击时如何更改按钮的背景图像?

Kivy 按钮背景图像大小

在 kivy python 中将按钮的背景更改为不同的形状和样式,如阴影效果等

.gif 图像作为源代码在 Windows kivy 程序中运行良好。通过 kivy Launcher 运行显示 gif 图像的背景

更改背景画布 kivy

Kivy——图像作为按钮