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
一応、動作確認できたスクリプトも書いておく。
中ボタンドラッグでスクロールができたりしないかな…。でも、スマホ用を意識したライブラリっぽい気配もするから無理かな…。
以下のページが参考になった。ありがたや。
_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 日分です。