【问题标题】:How can I resize a picture in kivy?如何在kivy中调整图片大小?
【发布时间】:2020-05-02 19:27:44
【问题描述】:

我正在使用 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】:

    一种方法是在按钮画布上绘制图像。属性“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)
    

    如果您没有为按钮显式设置大小,则需要将 size 属性绑定到方法以调整图像大小。

    示例:

    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
    

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

    【讨论】:

    • 我需要导入一些东西才能使用尺寸调整吗?
    • 不,只需要导入Image类,adjust_size方法只取bind方法的参数。将此函数添加到您的 main(GridLayout) 类中。
    • 我添加了它,但是当我运行它时,它使:AttributeError: 'main' object has no attribute 'adjust_size'
    • 在哪里?评论框不够大
    • 更新您的帖子或简单地在答案或粘贴箱中回复。
    猜你喜欢
    • 2023-04-01
    • 2015-03-24
    • 2019-05-11
    • 1970-01-01
    • 2021-05-07
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多