Делаем часть экрана прокручиваемым изображением с помощью kivy - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь сделать часть экрана прокручиваемым изображением, чтобы оно поместилось на экране, не нарушая пропорции изображения (см. Файл notebook.jpg в коде). Я видел несколько комментариев, в которых предлагалось использовать ScrollView, но я не мог понять, как добавить его в существующий класс, который у меня уже есть (я имею в виду второй класс в дополнение к NotebookScreen, поэтому NotebookScreen сможет его использовать). Был бы очень признателен за помощь :)

Python код:


import kivy
from kivy.lang import Builder
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout

GUI = Builder.load_file('style.kv')
# Window.size = (2224, 1668)


class NotebookScreen(GridLayout):

    def __init__(self, **kwargs):
        self.rows = 1
        super(NotebookScreen, self).__init__(**kwargs)


class MainApp(App):

    def build(self):
        return NotebookScreen()


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


код kivy:


<NotebookScreen>
    FloatLayout:
        rows: 2
        GridLayout:
            size_hint: 1, .05
            pos_hint: {"top": 1, "left": 1}
            id: tool_bar
            cols: 1
            canvas:
                Color:
                    rgba: 0, 0, 1, 1
                Rectangle:
                    pos: self.pos
                    size: self.size
        BoxLayout:
            id: notebook_grid
            size_hint: 1, .95
            pos_hint: {"top": .95, "left": 0}
            cols: 1
            Image:
                id: notebook_image
                source: 'images/notebook.jpg'
                allow_stretch: True
                keep_ratio: True
                pos: self.pos
                size_hint: 1, 1


1 Ответ

0 голосов
/ 05 мая 2020

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

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
from kivy.lang.builder import Builder
from PIL import Image

kv = """
#:import Window kivy.core.window.Window
<MyImageView>:

    orientation: "vertical"
    size_hint: None, None
    size: Window.size

    Label:
        text: "This is your picture!"
        size_hint: None, None
        size: Window.width, Window.height * .5
    ScrollView:
        size_hint: None, None
        size: Window.width, Window.height * .5
        Label:
            id: img_box
            size_hint: None, None
            size: root.img.size
            canvas:
                Rectangle:
                    source: root.img_path
                    size: root.img.size
"""

class MyImageView(BoxLayout):
    def __init__(self, img_path, **kwargs):
        self.img_path = img_path
        self.img = Image.open(self.img_path)
        Window.size = (self.img.size[0] * 0.8, self.img.size[1] * 1.2)
        super(MyImageView, self).__init__(**kwargs)



class MyApp(App):
    def build(self):
        Builder.load_string(kv)
        layout = MyImageView("Path/to/your/image.png")


        return layout

MyApp().run()
...