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

2024-06-06 21:04:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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”)来调整图片的大小,但没有成功。我尝试了同样的方法,但结果是一样的。什么也没动。我看了一些关于按钮的文档,并给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()

我们将不胜感激。请随便问任何问题。提前谢谢


Tags: textfromimportselfformaddpngdef
1条回答
网友
1楼 · 发布于 2024-06-06 21:04:08

一种方法是在按钮画布上绘制图像。属性“allow_stretch”和“keep_ratio”用于填充整个按钮大小

from kivy.uix.image import Image

然后:

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

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

相关问题 更多 >