Пытаюсь сделать кнопку на киве с размером растянутого изображения - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь создать экран в киве. Я хочу, чтобы на экране была небольшая кнопка главного меню в верхнем левом углу, большое изображение в центре экрана с примерно 80 процентами размера экрана и, кроме того, под всем, что мне нужно, кнопка, размер которой зависит от размера изображения.

Например, Кнопка main_menu должна находиться в верхнем левом углу, и 5 процентов высоты экрана и его ширина должны быть настолько малы, насколько позволяет его текст. Размер изображения должен составлять 80 процентов экрана, Кнопка ниже должна иметь высоту 5 процентов и ширину, которые зависят от размера изображения.

Мой текущий код такой, но когда я запускаю этот код, текст на кнопке ниже показывает размер окна (1920, 1080) и (1, 1).

То, что я ожидаю от этого, чтобы показать, является размером изображения

#:kivy 0.0.0

<EditingScreen>:
    GridLayout:
        rows: 3
        spacing: 10

        AnchorLayout:
            size_hint: None, 0.05
            anchor_x: 'left'
            anchor_y: 'top'
            Button:
                text: 'Main Menu'
                on_press: root.manager.current = 'main'

        Image:
            id: some_image
            source: 'img.png'
            allow_stretch: True
            keep_ratio: True

        Button:
            text: str(some_image.size) + ' ' + str(some_image.size_hint)
            size_hint: None, 0.05                
            width: some_image.width

EDIT: Добавление моего кода Python: 1) screen_manager.py:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager

from editing_screen import EditingScreen


class Manager(ScreenManager):
    def __init__(self, **kwargs):
        super(Manager, self).__init__(**kwargs)

        self.add_widget(MainScreen(name='main'))
        self.add_widget(InstructionsScreen(name='instructions'))
        self.add_widget(EditingScreen(name='editing'))
        self.current = 'editing'


class ManagerApp(App):
    def build(self):
        return Manager()

if __name__ == '__main__':
    ManagerApp().run()

2) edit_screen.py:

from kivy.uix.screenmanager import Screen
from kivy.lang import Builder

Builder.load_file('editing_screen.kv')

class EditingScreen(Screen):
    pass

3) Первый указанный код в файле с именем edit_screen.kv

1 Ответ

0 голосов
/ 04 января 2019

В вашем editing_screen.kv, some_image.size дает вам размер виджета Image, который не обязательно соответствует размеру самого изображения.Фактический размер изображения доступен в виде свойства norm_image_size виджета Image.

...