Oke, jadi saya sedang membangun sesuatu dengan Kivy(1.11.1) dan meringkas saya memiliki ScrollView yang menggulir secara vertikal dan di dalamnya ada beberapa ScrollViews lain tetapi yang ini hanya menggulir secara horizontal, masalahnya adalah setiap kali saya menggulir ScrollView luar ke bawah dan posisi mouse masuk ke Horizontal ScrollViews bagian dalam, Scrollview luar berhenti menggulir ke bawah, sepertinya begitu posisi mouse bertabrakan dengan scrollview horizontal, perilaku gulir berhenti dikirim ke ScrollView luar (vertikal) sehingga berhenti menggulir ke bawah. Yang saya inginkan adalah sesuatu seperti halaman Netflix, di mana ada beberapa tampilan gulir secara horizontal (Daftar Saya, Seri, Film Horor, dll) yang dapat Anda gulir untuk melihat lebih banyak opsi tetapi semuanya ada di dalam tampilan gulir luar yang menggulir secara vertikal, dari Tentu saja di Netflix ketika Anda menggulir ke bawah bahkan jika posisi mouse Anda masuk ke dalam salah satu tampilan gulir horizontal, itu masih terus menggulir ScrollView luar ke bawah.

Saya sudah mencoba mengatur scrollview horizontall do_scroll_y ke False tetapi masalahnya terus berlanjut. Selain itu. Menggulir ke atas berfungsi dengan baik

from kivy.app import App
from kivy.lang.builder import Builder
from kivy.uix.boxlayout import BoxLayout

Builder.load_string(
'''
<ScrollApp>:
    ScrollView:
        bar_width: 10
        scroll_type: ['bars', 'content']

        BoxLayout:
            id: content
            orientation: 'vertical'
            size_hint: 1, None
            height: self.minimum_height
            padding: 22, 0, 22, 50
            spacing: 50
            canvas:
                Color:
                    rgba: .15, .15, .15, .9
                Rectangle:
                    size: self.size
                    pos: self.pos
            Button:
                size_hint: None, None
                width: 100
                height: 100
                on_press: print('pressed')
            # "ScrollViews containers"
            Custom
            Custom
            Custom
            Custom

<Custom@BoxLayout>:
    orientation: 'vertical'
    size_hint: 1, None
    height: self.minimum_height
    Label:
        size_hint: None, None
        size: self.texture_size
        id: label
        font_size: 20
    ScrollView:
        size_hint: 1, None
        height: 150
        do_scroll: True, False

        on_scroll_start: print('scrolling. but why?')
        GridLayout:
            id: grid
            size_hint: None, None
            size: self.minimum_width, 150
            spacing: 5
            cols: 3
            Button:
                size_hint: None, None
                size: 400, 150
            Button:
                size_hint: None, None
                size: 400, 150
            Button:
                size_hint: None, None
                size: 400, 150
''' )

class ScrollApp(BoxLayout):
    pass

class Test(App):
    def build(self):
        return ScrollApp()

Test().run()


0
Gustavo Sales 7 Agustus 2019, 17:00

1 menjawab

Jawaban Terbaik

Saya tidak dapat mengklaim untuk memahami situasi ini sepenuhnya, tetapi tampaknya vertikal ScrollView di dalam vertikal lain ScrollView berfungsi. Jadi, solusinya adalah membuat ScrollView di dalam kelas Custom Anda untuk memungkinkan pengguliran vertikal (bersama dengan pengguliran horizontal). Untuk melakukannya, ubah kv untuk ScrollView di dalam Custom menjadi:

ScrollView:
    size_hint: 1, None
    height: 150
    do_scroll: True, True  # allow vertical scrolling also

    on_scroll_start: print('scrolling. but why?')
    GridLayout:
        id: grid
        size_hint: None, 1.01   # height must be slightly greater than ScrollView height
        width: self.minimum_width

Agar pengguliran vertikal berfungsi di atas, tinggi GridLayout harus lebih besar dari tinggi ScrollView, demikian petunjuk ukuran 1.01.

0
John Anderson 8 Agustus 2019, 17:32