如何在kivy中调整图片大小?

问题描述 投票:0回答:1

我在使用kivy,我想做一个程序来帮助我记住超级赛亚人的转变。我希望按钮是图片而不是文字。所以这是我用来让按钮变成图片的代码。

self.Goku = Button(background_normal = '106-1060675_goku-base-form-png-clipart (1).png')
self.Goku.bind(on_press = self.SonGoku)
self.add_widget(self.Goku)

当我运行代码想看看它是什么样子的时候 我发现其中一个图片太大了,一个太小了。所以我试着通过添加size = ("10, 10")来调整图片的大小,但是没有成功。我尝试用size_hint做同样的事情,但结果一样。什么都没动。我看了一些关于按钮和向kivy添加图片的文档,但没有什么帮助。这里是整个代码。

import kivy
from kivy.app import App
from kivy.graphics import *
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout

class main(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.cols = 4

        self.Goku = Button(background_normal = '106-1060675_goku-base-form-png-clipart (1).png', size_hint = (1, 0.5))
        self.Goku.bind(on_press = self.SonGoku)
        self.add_widget(self.Goku)

        self.Vegeta = Button(background_normal = 'vegeta-png-clip-art.png', size_hint = (1, 1))
        self.Vegeta.bind(on_press = self.PrinceVegeta)
        self.add_widget(self.Vegeta)

    def SonGoku(self, instance):
        self.cols = 1

        self.remove_widget(self.Goku)
        self.remove_widget(self.Vegeta)

        self.NormalGoku = Button(text = "Base form")
        self.add_widget(self.NormalGoku)
        self.SSJGoku = Button(text = "Super saiyan")
        self.add_widget(self.SSJGoku)
        self.SSJ2Goku = Button(text = "Super saiyan 2")
        self.add_widget(self.SSJ2Goku)

    def PrinceVegeta(self, instance):
        self.cols = 1

        self.remove_widget(self.Goku)
        self.remove_widget(self.Vegeta)

        self.NormalVegeta = Button(text = "Base form")
        self.add_widget(self.NormalVegeta)
        self.SSJVegeta = Button(text = "Super saiyan")
        self.add_widget(self.SSJVegeta)
        self.SSJ2Vegeta = Button(text = "Super saiyan 2")
        self.add_widget(self.SSJ2Vegeta)

class Saiyan(App):
    def build(self):
        return main()

if __name__ == "__main__":
    Saiyan().run()

希望能得到帮助 欢迎提出任何问题。先谢谢你了。

python kivy size
1个回答
1
投票

一种方法是在按钮的画布上画出图片。"allow_stretch "和 "keep_ratio "的属性用来填充整个按钮的大小。

from kivy.uix.image import Image

然后,在你没有设置大小的情况下,你可以用 "allow_stretch "和 "keep_ratio "属性来填充整个按钮的大小。

self.Goku = Button(size_hint=(None, None), size=(120,120))
with self.Goku.canvas:
    Image(source='vegeta-png-clip-art.png', size=self.Goku.size, pos=self.Goku.pos, allow_stretch=True, keep_ratio=False)
self.add_widget(self.Goku)

如果你没有为按钮明确地设置大小 你需要将大小属性绑定到一个方法上 以便调整图像的大小。

举个例子。

class main(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.cols = 4
        self.Goku = Button()
        with self.Goku.canvas:
            self.Goku_img = Image(source='vegeta-png-clip-art.png', size=self.Goku.size, pos=self.Goku.pos, allow_stretch=True, keep_ratio=False)
        self.Goku.bind(size=self.adjust_size)
        self.add_widget(self.Goku)

...

    def adjust_size(self, instance, value):
        self.Goku_img.size = value

我希望这是个适合你的方法。

© www.soinside.com 2019 - 2024. All rights reserved.