Возникли проблемы с созданием прокручиваемого boxlayout, но у меня возникли проблемы - PullRequest
0 голосов
/ 26 марта 2020

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

Вот BoxLayout

class PictureLayout(BoxLayout):
    def __init__(self, **kwargs):
        super(PictureLayout, self).__init__(**kwargs)
        self.orientation = "horizontal"
        self.height = self.minimum_height
        self.spacing = 20
        self.padding = [10, 10]
        self.size_hint_y = 1

Вот изображения

class ProfileWindow(Screen):
    def __init__(self, **kwargs):
        super(ProfileWindow, self).__init__(**kwargs)

        self.scrollview = ScrollView(pos_hint = {"center_x": 0.5, "center_y": 0.5}, size_hint = (1, 0.8))
        self.add_widget(self.scrollview)

        self.stack = PictureLayout()
        self.scrollview.add_widget(self.stack)




        self.sampleimage = ImageButton(source="icons/addimage.png",
                                           size_hint=(0.9, None))
        self.sampleimage.bind(on_release=self.sampleimagechange)
        self.stack.add_widget(self.sampleimage)

        self.sampleimage2 = ImageButton(source="icons/addimage.png",
                                            size_hint=(0.9, None))
        self.sampleimage2.bind(on_release=self.sampleimagechange2)
        self.stack.add_widget(self.sampleimage2)

        self.sampleimage3 = ImageButton(source="icons/addimage.png",
                                            size_hint=(0.9, None))
        self.sampleimage3.bind(on_release=self.sampleimagechange3)
        self.stack.add_widget(self.sampleimage3)

        self.sampleimage4 = ImageButton(source="icons/addimage.png",
                                            size_hint=(0.9, None))
        self.sampleimage4.bind(on_release=self.sampleimagechange4)
        self.stack.add_widget(self.sampleimage4)

        self.sampleimage6 = ImageButton(source="icons/addimage.png",
                                            size_hint=(0.9, None))
        self.sampleimage6.bind(on_release=self.sampleimagechange6)
        self.stack.add_widget(self.sampleimage6)



1 Ответ

0 голосов
/ 28 марта 2020

Вы должны установить для width PictureLayout значение, большее, чем width для ScrollView. Например, будет работать следующее:

class PictureLayout(BoxLayout):
    def __init__(self, **kwargs):
        super(PictureLayout, self).__init__(**kwargs)
        self.orientation = "horizontal"
        self.spacing = 20
        self.padding = [10, 10]
        self.size_hint_y = 1
        self.size_hint_x = None
        self.width = 3000

Лучшим подходом будет использование языка kv:

class PictureLayout(BoxLayout):
    pass

kv = '''
ProfileWindow:
    name: 'profile'
<PictureLayout>:
    orientation: "horizontal"
    spacing: 20
    padding: [10, 10]
    size_hint_x: None
    width: self.minimum_width
'''

class HSApp(App):
    def build(self):
        return Builder.load_string(kv)

При этом используется свойство minimum_width BoxLayout, но чтобы это работало, вы должны установить размер каждого ImageButton (настройка size_hint не будет работать). Обратите внимание, что при использовании self.minimum_height или self.minimum_width в коде python используется значение этого свойства во время выполнения кода python. Использование этого же свойства в kv (как и width: self.minimum_width) также устанавливает привязку, поэтому, когда minimum_width из PictureLayout изменяется, его width также изменит

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