###前提・実現したいこと
今、kivyファイルを1枚で作ってます。
ScreenManagerで画面切り替えをできるようにしています。
test.kvの中身が増えてきて、ごちゃごちゃしてきたので画面の処理ごとにkvファイルを作りたいと思ってます。
サイトのソースをそのままコピーしてみましたが、エラーが発生しました。
kivyのバージョンが違うのでしょうか?
サイト名:Qiita 項目:Python Kivy で外部KvファイルをIncludeして使用する
######main.py(サイトのソース)
python
1from kivy.app import App 2from kivy.uix.boxlayout import BoxLayout 3from kivy.properties import ObjectProperty 4 5class RootWidget(BoxLayout): 6 button_include = ObjectProperty() 7 8 def print_obj(self, obj): 9 print(obj) 10 11 def check_button_include(self): 12 print(self.button_include) 13 14class TestApp(App): 15 def build(self): 16 return RootWidget() 17 18if __name__ == '__main__': 19 TestApp().run()
######test.kv(サイトのソース)
python
1#:include gui/tab_test.kv 2<RootWidget>: 3 button_include: tab_button_include.button_include 4 5 TabbedPanel: 6 do_default_tab: False 7 8 TabbedPanelItem: 9 text: 'Tab1' 10 BoxLayout: 11 Button: 12 text: 'button 1' 13 on_press: root.print_obj(self) 14 Button: 15 text: 'button 2' 16 on_press: root.check_button_include() 17 TabbedPanelItem: 18 text: 'Tab2' 19 ButtonInclude: 20 id: tab_button_include
######gui/tab_test.kv(サイトのソース)
python
1<ButtonInclude@Button>: 2 button_include: button_include 3 4 id: button_include 5 text: 'button include' 6 on_press: app.root.print_obj(self)
######main.py(私のソース)
python
1# -*- coding: utf-8 -*- 2import kivy 3kivy.require('1.7.3') 4from kivy.lang import Builder 5from kivy.app import App 6from kivy.uix.boxlayout import BoxLayout 7from kivy.uix.widget import Widget 8from kivy.core.window import Window 9from kivy.properties import StringProperty,ListProperty 10Window.clearcolor=[0.999,0.89,0.999,1] 11 12import csv 13import codecs 14 15import sys 16from kivy.core.text import LabelBase, DEFAULT_FONT 17from kivy.resources import resource_add_path 18 19# デフォルトに使用するフォントを変更する 20resource_add_path('./fonts') 21LabelBase.register(DEFAULT_FONT, 'mplus-2c-regular.ttf') #日本語が使用できるように日本語フォントを指定する 22 23class TextWidget(BoxLayout): 24 text = StringProperty() 25 def __init__(self, **kwargs): 26 super(TextWidget, self).__init__(**kwargs) 27 self.text = 'Good' 28 def buttonClicked(self): 29 self.text=self.ids["text_box"].text 30 self.text2=self.ids["text_box2"].text 31 word=[[self.text,self.text2]] 32 f = codecs.open('sample.csv',"a","utf-8") 33 writer = csv.writer(f) 34 #writer.writerow(self.text) 35 writer.writerows(word) 36 37 f.close 38 def buttonClicked2(self): 39 f = codecs.open('sample.csv',"r","utf-8") 40 reader = csv.reader(f) 41 for row in reader: 42 print(row[0] + " " + row[1]) 43 f.close() 44 45 def buttonClicked_tops(self): 46 pass 47 def buttonClicked_bottoms(self): 48 bird = Bird() 49 self.add_widget(bird) 50 def buttonClicked_autor(self): 51 pass 52 53class TestApp(App): 54 def __init__(self, **kwargs): 55 super(TestApp, self).__init__(**kwargs) 56 self.title = 'Apomol' 57 reload(sys) 58 sys.setdefaultencoding('utf-8') 59 Builder.load_file('main.kv') 60 def build(self): 61 return TextWidget() 62 63 64if __name__ == '__main__': 65 TestApp().run()
#####test.py
TextWidget: # ルートに追加 <TextWidget>: orientation: 'vertical' ScreenManager: size_hint_y: 0.7 id: scrmgr Screen: name: 'top' Screen: #ここの中身を別kvにしたい name: 'main1' BoxLayout: orientation:'vertical' size:root.size Label: id:label2 font_size:20 text:'Select the type' color:[0.2,0.2,0.2,1] BoxLayout: Label: size: 50,50 size_hint: None, None Button: text:"トップス" size: 150,150 size_hint: None, None Image: source: "bird.png" center_x: self.parent.center_x center_y: self.parent.center_y Button: size: 150,150 size_hint: None, None Image: source: "bird.png" center_x: self.parent.center_x center_y: self.parent.center_y Button: id:button_bottoms text:"bottoms" size_hint_y:0.3 on_press:scrmgr.current = 'bottoms' Button: id:button_autor text:"autor" size_hint_y:0.3 on_press:scrmgr.current = 'autor' Screen: #ここの中身を別kvにしたい name: 'main2' BoxLayout: orientation:'vertical' size:root.size Label: id:label1 font_size:20 text:"洋服の登録をします" color:[0.2,0.2,0.2,1] BoxLayout: TextInput: id:text_box focus:True text:"名前" on_text_validate:root.buttonClicked() TextInput: id:text_box2 focus:True text:"色" on_text_validate:root.buttonClicked() Label: id:label_pass1 Label: id:label_pass11 BoxLayout: Label: id:label_pass1 Button: id:button1 text:"登録" size_hint_x:1 size_hint_y:1 on_press:root.buttonClicked() Label: id:label_pass2 Button: id:button2 text:"表示" size_hint_x:1 size_hint_y:1 on_press:root.buttonClicked2() Label: id:label_pass3 Screen: #main1から派生するScreen name: 'tops' BoxLayout: orientation:'vertical' BoxLayout: Button: id:back_tops Image: source: "bird.png" BoxLayout: Button: id:back_tops text:'back' size_hint_x:1 on_press:scrmgr.current = 'main1' Screen: #main1から派生するScreen name: 'bottoms' Screen: #main1から派生するScreen name: 'autor' BoxLayout: size_hint_y: 0.1 padding: 10,10,20, 10 Button: text: "top" font_size: 20 on_press: scrmgr.current = 'top' Button: text: "main1" font_size: 20 on_press: scrmgr.current = 'main1' Button: text: "main2" font_size: 20 on_press: scrmgr.current = 'main2'
###補足情報(言語/FW/ツール等のバージョンなど)
python2.7
kivy
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/02 06:59
2017/11/20 07:19