Как я могу изменить размер картинки в киве? - PullRequest
0 голосов
/ 02 мая 2020

Я использую 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()

Помощь будет принята с благодарностью. Не стесняйтесь задавать любые вопросы. Заранее спасибо.

1 Ответ

1 голос
/ 02 мая 2020

Один из способов сделать это - нарисовать изображение на холсте кнопок. атрибуты "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

Надеюсь, это подходящий для вас подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...