kivy,Python,実行時、スクリーン上で何も表示されない
こんにちは、Python初心者です。
ファイル名は以下の通りです。
・mobiDB_ver1.2.py
・design.kv
このプログラムでは、kivyを用いて
データベースからキーワードをもとにデータを抽出し出力するソフトを目指しています。
問題点は、一番初めに起動されるTop_Screenが表示されないことです。
なぜ、そうなるのか教えていただきたいです。
build = Builder.load_file("design.kv")はUnicodeDecodeError: 'cp932'がでるので消しました。
以下がソースコードになります。
mobiDB_ver1.2.py
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
import threading
from kivy.core.window import Window
class Top_Screen(Screen):
"""Top画面"""
def press_enter_button(self):
sm.add_widget(Search_Screen(name='search')) # 初期処理を動かしたい画面は遷移の直前に追加する
sm.remove_widget(self)
sm.current = 'search' #遷移
class Search_Screen(Screen):
"""search画面"""
def __init__(self, **kwargs):
super(Search_Screen, self).__init__(**kwargs)
self.text = '' # 検索のキーワードを取得
self.btn_mythread = threading.Thread(target=self.search_to_uniprot_thread)
def press_search_button(self):
#ボタンが押されたときスレッドをスタート
print("begin")
sm.add_widget(Search_Screen(name='wait')) # 初期処理を動かしたい画面は遷移の直前に追加する
sm.current = 'wait' #遷移
self.btn_mythread.start() #スレッドスタート
def search_to_uniprot_thread(self):
# Uniprotに接続
from bioservices import UniProt
service = UniProt()
# 検索用の値をqueryとして代入
query = self.ids["text_box"].text
# データを抽出し出力.
result = service.search("keyword:" + query)
print(result)
print("finish")
sm.add_widget(Output_Screen(name='output')) # 初期処理を動かしたい画面は遷移の直前に追加する
sm.current = 'output'
class Wait_Screen(Screen):
"""データ抽出中のwait画面"""
def press_cancel_button(self):
# ボタンが押されたときSearch画面に戻る
sm.remove_widget(self)
sm.current = 'search'
class Output_Screen(Screen):
"""output画面"""
def press_return_button(self):
# ボタンが押されたときSearch画面に戻る
temp = sm.get_screen('select')
sm.remove_widget(temp)
sm.remove_widget(self)
sm.current = 'search'
sm = ScreenManager() #スクリーンマネージャ
class MobiDBApp(App):
def build(self):
sm.add_widget(Top_Screen(name='top'))
sm.current = 'top'
return sm
if __name__ == '__main__':
Window.size = (400, 220)
MobiDBApp().run()
design.kv
<Top_Screen>:
BoxLayout:
size: root.size
Button:
size: 50,50
size_hint: None,None
text: 'Search画面へ'
on_press: root.press_enter_button() #Top_Screenのメソッドが実行される
<Search_Screen>:
BoxLayout:
orientation: 'vertical'
size: root.size
Label:
text_size: self.size
text: 'Searching in MobiDB'
halign: 'left'
size_hint_x: 1
size_hint_y:0.5
font_size: 24
Label:
size_hint_y: 0.1
text:''
BoxLayout:
size_hint_x:0.9
size_hint_y:0.4
orientation: 'horizontal'
TextInput:
id:text_box
font_size: 22
focus: True
on_text_validate: root.btnClicked_text()
Label:
size_hint_y: 0.1
text:''
FloatLayout:
Button:
text: "Search"
size_hint_x: 0.23
size_hint_y: 0.3
pos_hint: {"x":0.75, "y":0}
font_size: 20
on_press:
root.manager.transition.direction = 'RiseInTransition'
root.press_search_button()
<Wait_Screen>:
BoxLayout:
orientation: 'vertical'
size: root.size
Label:
size_hint_y: 0.1
text:''
Label:
text_size: self.size
text: 'Searching Now'
halign: 'left'
size_hint_x: 1
size_hint_y:0.8
font_size: 24
Label:
size_hint_y: 0.1
text:''
Button:
size: 50,50
size_hint: None,None
text: "cancel"
on_press: root.press_cancel_button() #Top_Screenのメソッドが実行される
<Output_Screen>:
BoxLayout:
size: root.size
Button:
size: 50,50
size_hint: None,None
text: 'finish'
on_press: root.press_return_button() #Top_Screenのメソッドが実行される