前提・実現したいこと
Kivyでアプリ制作をしていて、画面の1つにカレンダーを表示させようとしています。ScreenManagerによる画面遷移はできました。GridLayoutを使ってカレンダーを表示させることもできました。しかし、これら2つを組み合わせて、「画面遷移先にカレンダーを表示させる」ことができません。
以下のScreen_TwoとScreen_Two_Layoutが該当部分です(不必要なコードは省いています)。メイン画面でボタンを押すとスクリーン1からスクリーン2に画面を切り替えられるという設計です。kvファイルの該当部分には特に何も書いていないません。
該当のソースコード
Python3
1from kivy.app import App 2from kivy.uix.screenmanager import ScreenManager, Screen 3from kivy.uix.boxlayout import BoxLayout 4from kivy.uix.button import Button 5from kivy.uix.gridlayout import GridLayout 6 7class Display(BoxLayout): 8 pass 9 10class Screen_One(Screen): 11 pass 12 13class Screen_Two(GridLayout): 14 def __init__(self, **kwargs): 15 super(Screen_Two, self).__init__(**kwargs) 16 self.cols = 7 17 # 日付を取得する 18 import calendar 19 cal = calendar.Calendar() 20 import datetime 21 dt_now = datetime.datetime.now() 22 year, month = dt_now.year, dt_now.month 23 day = cal.monthdayscalendar(year, month) 24 25 #カレンダーに数字を入れる 26 for i in range(42): 27 c = i%7 28 r = int(i/7) 29 try: 30 if day[r][c] != 0: 31 btn = Button(text=str(day[r][c])) 32 self.add_widget(btn) 33 else: 34 btn = Button(text='') 35 self.add_widget(btn) 36 except: 37 break 38 39class SM02App(App): 40 def build(self): 41 return Display() 42 43if __name__ == '__main__': 44 SM02App().run()
kv
1#: import RiseInTransition kivy.uix.screenmanager.RiseInTransition 2#: import SlideTransition kivy.uix.screenmanager.SlideTransition 3 4<Display>: 5 BoxLayout: 6 orientation: "vertical" 7 BoxLayout: 8 size_hint: 1, None 9 height: '60dp' 10 Label: 11 id: label1 12 text: 'Home' 13 font_size: 30 14 Label: 15 id: label2 16 text: 'aaa' 17 18 ScreenManager: 19 id: sm 20 Screen_One: 21 Screen_Two: 22 23 BoxLayout: 24 size_hint: 1, None 25 height: '48dp' 26 Button: 27 text: 'Go to Screen1' 28 on_release: 29 sm.transition = RiseInTransition() 30 sm.current = 'screen_one' 31 Button: 32 text: 'Go to Screen2' 33 on_release: 34 sm.transition = RiseInTransition() 35 sm.current = 'screen_two' 36 37<Screen_One>: 38 name: 'screen_one' 39 Button: 40 background_color: 1,0,0,1 41 text: 'Screen1' 42 43<Screen_Two>: 44 name: 'screen_two' 45
以下がエラーメッセージです。ScreenManagerではGridLayoutを受け入れてくれないらしいというところまでは分かりました。
発生している問題・エラーメッセージ
kivy.uix.screenmanager.ScreenManagerException: ScreenManager accepts only Screen widget.
試したこと
Kvファイル上でGridLayoutを作成したり、Screen_Twoのクラスの外側でレイアウトを作ってそれを読み込むような形にしたりすればいいのかなと思いましたが、調べてもやり方が見つけられませんでした。
self.layoutでGridLayoutを指定しましたが、うまくいかず、最後に追加したボタン1つだけが表示されます。
基本的な内容ですがよろしくお願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。