###やりたいこと,困っていること
一度作ったものを一からkivyで作り直し中の、勉強中の者です。
簡単に言うと、classで定義したものを、画面に追加する方法が分かりません。
この2つのものを、左の図の下に、右の図がくるようにしたいのです。(右の図は、動的に変わります。)
最終的には、kivyのAccordion等で、切り替えたいと思うのですが、ネットで調べてもボタンをkvファイルに書いて表示するものはありますが、そこに複雑なもの(動的に変わるもの)を表示する方法が分かりません。
1つのファイルに、書きたいと思っています。ご助力お願いします。
以下に、メインのpy,kvファイル、それから追加したいpyファイルのコードを簡単に記述します。
Main.pyの内容
python
1from kivy.app import App 2from kivy.uix.boxlayout import BoxLayout 3from kivy.uix.textinput import TextInput 4from kivy.uix.button import Button 5from kivy.uix.label import Label 6from kivy.uix.widget import Widget 7from kivy.uix.spinner import Spinner 8from kivy.properties import StringProperty 9import japanize_kivy 10 11class CustomSpinner(Spinner): 12 pass 13 14class TextWidget(Widget): 15 text = StringProperty() 16 17 def on_spinner_change(self, text): 18 print('The spinner', self, 'have text', text) 19 20 def __init__(self, **kwargs): 21 super(TextWidget , self).__init__(**kwargs) 22 self.text = '新しい提出物 ' 23 24 def on_enter(self, **kwargs): 25 print(self.text) 26 27 def buttonClicked(self, **kwargs ): 28 print("pressed[%s]" % (self.text)) 29 30 def delbuttonClicked(self, **kwargs ): 31 print("pressed[%s]" % (self.text)) 32 33 34class MainApp(App): 35 def __init__(self, **kwargs): 36 super(TeisyutuApp, self).__init__(**kwargs) 37 self.title = '提出物チェック表!' 38 39 def build(self): 40 return TextWidget() 41 42 43if __name__ == "__main__": 44 MainApp().run()
kvファイル
kivy
1<TextWidget>: 2 BoxLayout: 3 orientation: 'vertical' 4 size: root.size 5 6 BoxLayout: 7 size_hint_y: 0.08 8 CustomSpinner: 9 text: '選択' 10 values: 'Home', 'Work', 'Other', 'Custom' 11 size_hint: 0.3 , 1 12 pos_hint: {'center_x': .5, 'center_y': .5} 13 on_text: root.on_spinner_change(self.text) 14 15 Label: 16 id: label1 17 size_hint: 0.3 , 1 18 pos_hint: {'center_x': .3, 'center_y': .5} 19 font_size: 14 20 text: "←エクセルファイルを選択" 21 Widget: 22 size_hint_x: 0.2 23 Button: 24 id: button1 25 size_hint: 0.2, 1 26 text: "削除!" 27 font_size: 14 28 on_press: root.delbuttonClicked() # ボタンをクリックした時にpython側の関数を呼ぶ 29 30 BoxLayout: 31 size_hint_y: 0.08 32 Widget: 33 size_hint: 0.05 , 1 34 35 # ラベル 36 Label: 37 id: label2 38 size_hint: 0.3 , 1 39 font_size: 14 40 text: root.text # root(TextWidget)の変数テキストの値を取得 41 42 TextInput: 43 id: textinput 44 size_hint: 0.4, 1 45 text: "新しい提出物名" 46 font_size: 14 47 multiline: False 48 49 50 Button: 51 id: button2 52 size_hint: 0.2, 1 53 text: "追加!" 54 font_size: 14 55 on_press: root.buttonClicked() # ボタンをクリックした時にpython側の関数を呼ぶ 56 57 Widget: 58 59 BoxLayout: 60 size_hint_y: 0.8
そして、追加したいpyファイル
python
1from kivy.app import App 2from kivy.uix.gridlayout import GridLayout 3from kivy.uix.button import Button 4 5 6####定義変数#### 7yoko = 5 #横の値 8tate = 6 #縦の値 9 10class Zaseki(App): 11 12 def build(self): ###座席票作成プログラム### 13 self.title = 'チェック表' 14 layout = GridLayout(cols = yoko) 15 self.buttons = [] 16 id = 0 17 for i in range(tate): 18 for j in range(yoko): 19 id += 1 20 button = Button(text=str(id),font_size ="20sp",color =( .3 , 0 , 0 , 1 ),background_color =( 1 , 2.5 , 2 , 1 ), on_press=self.buttonClicked) 21 button.my_id = str(id) 22 layout.add_widget(button) 23# layout.add_widget(Button(text=str(id),on_press = lambda instance , n = id : self.buttonClicked(instance,n))) 24 25 print(self.buttons) 26 return layout 27 28 def buttonClicked(self,instance): ###座席クリック時の動作### 29 print(instance.my_id,"クリックした") 30 instance.disabled = True 31 32if __name__ == "__main__": 33 Zaseki().run()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/08 04:39