mieki256's diary



2020/03/17(火) [n年前の日記]

#1 [python] Kivyのスクロールバー関係を勉強中

PySide2 + QML でスクロールバーを使う方法は分かったけれど、他のGUIライブラリではそのへんどうなのかなと気になってきて。例えば Kivy あたりはスクロールバーが用意されていたりするのだろうかと。てなわけで、そのあたりをググったり試したりして勉強中。

以下のページが参考になった。ありがたや。

_Kivy ScrollViewの基本 - Qiita

kvファイル(レイアウトを指定するファイル)内で、ScrollView とやらで囲んでやればいいらしい。いくつか指定が必要になるらしいけど、随分簡単なのだなあ…。

手元の環境、Windows10 x64 1909 + Python 3.7.7 64bit + Kivy 1.11.1 で試してみたけれど、すんなり動いてくれた。

それはともかく、まるでスマホのようなスクロールをするのだな…。画面の端にあたるとバウンドするあたりとか。

PCのようなスクロールバーにはならないのだろうか、と思ってググってみたら、scroll_type とやらを指定するといいようで。

_python - How can I control my Kivy scrollview by dragging the sliders? - Stack Overflow

        ScrollView:
            scroll_type: ['bars', 'content']
            # scroll_type: ['bars']
            bar_width: 16
みたいな。'bars' を指定するとPCっぽくなるし、'content' を指定するとスマホっぽくなる模様。bar_width で、スクロールバーの太さを指定できる。

一応、動作確認できたスクリプトも書いておく。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.config import Config

from kivy.lang.builder import Builder

Config.set('input', 'mouse', 'mouse,disable_multitouch')

Builder.load_string('''
<MainScreen>:
    BoxLayout:
        size: root.size
        orientation: 'vertical'
        
        Label:
            size_hint_y: 0.1
            text: "Label Text"

        Button:
            size_hint_y: 0.1
            text: "Button Text"
    
        ScrollView:
            scroll_type: ['bars', 'content']
            # scroll_type: ['bars']
            bar_width: 16
    
            BoxLayout:
                size_hint: None, None
                size: 1280+128,720+128
                orientation: 'vertical'
    
                Image:
                    size_hint: 1.0, 1.0
                    allow_stretch: False
                    source: "./img2_1280x720.png"
                    canvas.before:
                        Color:
                            rgba: 0.3, 0.3, 0.3, 1
                        Rectangle:
                            size: self.size
                            pos: self.pos
''')

class MainScreen(BoxLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

class MainApp(App):
    def build(self):
        return MainScreen()

if __name__ == "__main__":
    MainApp().run()
1280x720 の img2_1280x720.png という画像を読み込んで表示する。画像内を左ボタンでドラッグしてもスクロールするし、スクロールバーをドラッグしてもスクロールする。

中ボタンドラッグでスクロールができたりしないかな…。でも、スマホ用を意識したライブラリっぽい気配もするから無理かな…。

以上、1 日分です。

過去ログ表示

Prev - 2020/03 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project