Kivy 按钮背景图像大小

Posted

技术标签:

【中文标题】Kivy 按钮背景图像大小【英文标题】:Kivy button background image size 【发布时间】:2021-04-04 08:49:22 【问题描述】:

我是 Kivy 的新手,我正在尝试使用 kivy 和滚动视图。 我需要停止按钮背景图像的拉伸,我希望按钮看起来像第一张图像。我正在使用 background_normal 将背景图像添加到按钮。我需要更改网格布局中的 row_default_height: root.height*0.3 吗?还是在每个按钮上添加图像高度和宽度?如何阻止图像调整大小?

任何帮助都会很好,谢谢:)

我的 .kv 文件

#: import FadeTransition kivy.uix.screenmanager.FadeTransition
#: import GridLayout kivy.uix.gridlayout
#: import BoxLayout kivy.uix.boxlayout
#: import ButtonBehavior kivy.uix.button
#: import Image kivy.uix.image
#: import Window kivy.core.window.Window
ScreenManager:
    transition: FadeTransition()
    MainScreen:
    AnotherScreen:

<MainScreen>:
    name: "main"
    BoxLayout:
        ScrollView:
            GridLayout:
                some_property: setattr(Window, 'fullscreen' , 'auto')  or 'real_value!'
                id: container_y
                size_hint_y: None
                cols: 2
                row_default_height: root.height*0.3
                height: self.minimum_height
                Image:
                    source: "teaflav/Crushes.png"
                Button:
                    background_normal: 'teaflav/Crushes.png'
                    on_release: app.root.current ="other"
                    height: 40
                Button:
                    background_normal: 'teaflav/Crushes.png'
                    on_release: app.root.current ="other"
                    height: 40
                Button:
                    background_normal: 'teaflav/Crushes.png'
                    on_release: app.root.current ="other"
                    height: 40
                Button:
                    background_normal: 'teaflav/Crushes.png'
                    on_release: app.root.current ="other"
                    height: 40
                Button:
                    background_normal: 'teaflav/Crushes.png'
                    on_release: app.root.current ="other"
                    height: 40

【问题讨论】:

【参考方案1】:

通过派生一个新类来创建一个 ImageButton。

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.image import Image


kv = """
#: import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManager:
    transition: FadeTransition()
    MainScreen:
        name: "main"
    AnotherScreen:
        name: 'other'

<AnotherScreen@Screen>:
    Button:
        text: 'Return to Main'
        on_release: root.manager.current = 'main' 
        

<MainScreen@Screen>:
    BoxLayout:
        ScrollView:
            GridLayout:
                id: container_y
                size_hint_y: None
                cols: 2
                row_default_height: root.height*0.3
                height: self.minimum_height
                Image:
                    source: "drink.png"
                ImageButton:
                    source: 'drink.png'
                    on_release: app.root.current ="other"
                    size_hint_y: None
                    height: 40
                ImageButton:
                    source: 'drink.png'
                    on_release: app.root.current ="other"
                    size_hint_y: None
                    height: 40
                ImageButton:
                    source: 'drink.png'
                    on_release: app.root.current ="other"
                    size_hint_y: None
                    height: 40
                ImageButton:
                    source: 'drink.png'
                    on_release: app.root.current ="other"
                    size_hint_y: None
                    height: 40
                ImageButton:
                    source: 'drink.png'
                    on_release: app.root.current ="other"
                    size_hint_y: None
                    height: 40
"""


class ImageButton(ButtonBehavior, Image):
    pass


class ImageButtonApp(App):
    def build(self):
        return Builder.load_string(kv)


ImageButtonApp().run()

【讨论】:

以上是关于Kivy 按钮背景图像大小的主要内容,如果未能解决你的问题,请参考以下文章

在kivy中单击时如何更改按钮的背景图像?

使用 Python kivy 创建游戏开始菜单

更改背景画布 kivy

如何在kivy中将屏幕背景设置为图像

如何设置透明背景颜色并对 kivy 图像进行抗锯齿处理?

以编程方式更改条形按钮背景的图像大小?