2017-07-17 3 views
1

私はkivyで非常に新しく、pythonを使った単純なアプリケーションで作業しています。私は左側のペインに一定のメニュー項目、右側の大きなペインまたは画面にそれぞれの画面を含むkivyでアプリケーションを作成したいと考えています。しかし、私はkivyの例題やyoutubeのビデオチュートリアルやgoogleでも解決策を見つけることができません。私の簡単なコードをチェックし、いくつかの解決策を参照してください。Kivy:複数の画面とメニュー項目が実装されていない

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.base import runTouchApp 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.button import Button 
from kivy.properties import NumericProperty 

#Code Starts here 
Builder.load_string(""" 
#:import random random.random 
#:import NoTransition kivy.uix.screenmanager.NoTransition 


<MenuScreen>: 
    hue: random() 
    canvas: 
     Color: 
      hsv: self.hue, .5, .12 
     Rectangle: 
      size: self.size 
    Button: 
     text: 'Home' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.95} 
     size: 150, 50 
     on_release: root.manager.current = 'home' 
     on_release: root.manager.transition = NoTransition(duration=0) 
    Button: 
     text: 'Login History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.88} 
     size: 150, 50 
     on_release: root.manager.current = 'loginhistory' 
     on_release: root.manager.transition = NoTransition(duration=0) 
    Button: 
     text: 'Alarm History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.81} 
     size: 150, 50 
     on_release: root.manager.current = 'alarmhistory' 
     on_release: root.manager.transition = NoTransition(duration=0) 
    Button: 
     text: 'User Management' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.74} 
     size: 150, 50 
     on_release: root.manager.current = 'usermanagement' 
     on_release: root.manager.transition = NoTransition(duration=0) 
    Button: 
     text: 'Call SoS' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.67} 
     size: 150, 50 
     on_release: root.manager.current = 'callsos' 
     on_release: root.manager.transition = NoTransition(duration=0) 
    Button: 
     text: 'Settings' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.60} 
     size: 150, 50 
     on_release: root.manager.current = 'settings' 
     on_release: root.manager.transition = NoTransition(duration=0) 
    Button: 
     text: 'Call RealTec' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.53} 
     size: 150, 50 
     on_release: root.manager.current = 'callrealtec' 
     on_release: root.manager.transition = NoTransition(duration=0) 
    BoxLayout: 
     size_hint: .5, None 
     height: 250 
     pos_hint: {'center_x': .5} 
     orientation: 'vertical' 


<HomeScreen>: 
    hue: random() 
    canvas: 
     Color: 
      hsv: self.hue, .5, .2 
     Rectangle: 
      size: self.size 
    Button: 
     background_color: [1, 2, 1, 2] 
     text: 'Home' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.95} 
     size: 150, 50 
    Button: 
     text: 'Login History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.88} 
     size: 150, 50 
     on_release: root.manager.current = 'loginhistory' 
    Button: 
     text: 'Alarm History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.81} 
     size: 150, 50 
     on_release: root.manager.current = 'alarmhistory' 
    Button: 
     text: 'User Management' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.74} 
     size: 150, 50 
     on_release: root.manager.current = 'usermanagement' 
    Button: 
     text: 'Call SoS' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.67} 
     size: 150, 50 
     on_release: root.manager.current = 'callsos' 
    Button: 
     text: 'Settings' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.60} 
     size: 150, 50 
     on_release: root.manager.current = 'settings' 
    Button: 
     text: 'Call RealTec' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.53} 
     size: 150, 50 
     on_release: root.manager.current = 'callrealtec' 
    Button: 
     text: 'Main Menu' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.46} 
     size: 150, 50 
     on_release: root.manager.current = 'menu' 
    BoxLayout: 
     size_hint: .5, None 
     height: 250 
     pos_hint: {'center_x': .5} 
     orientation: 'vertical' 

<LoginHistoryScreen>: 
    hue: random() 
    canvas: 
     Color: 
      hsv: self.hue, .5, .9 
     Rectangle: 
      size: self.size 
    Button: 
     text: 'Home' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.95} 
     size: 150, 50 
     on_release: root.manager.current = 'home' 
    Button: 
     text: 'Login History' 
     background_color: [1, 2, 1, 2] 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.88} 
     size: 150, 50 
    Button: 
     text: 'Alarm History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.81} 
     size: 150, 50 
     on_release: root.manager.current = 'alarmhistory' 
    Button: 
     text: 'User Management' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.74} 
     size: 150, 50 
     on_release: root.manager.current = 'usermanagement' 
    Button: 
     text: 'Call SoS' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.67} 
     size: 150, 50 
     on_release: root.manager.current = 'callsos' 
    Button: 
     text: 'Settings' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.60} 
     size: 150, 50 
     on_release: root.manager.current = 'settings' 
    Button: 
     text: 'Call RealTec' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.53} 
     size: 150, 50 
     on_release: root.manager.current = 'callrealtec' 
    Button: 
     text: 'Main Menu' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.46} 
     size: 150, 50 
     on_release: root.manager.current = 'menu' 
    BoxLayout: 
     size_hint: .5, None 
     height: 250 
     pos_hint: {'center_x': .5} 
     orientation: 'vertical' 


<AlarmHistoryScreen>: 
    hue: random() 
    canvas: 
     Color: 
      hsv: self.hue, .5, .6 
     Rectangle: 
      size: self.size 
    Button: 
     text: 'Home' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.95} 
     size: 150, 50 
     on_release: root.manager.current = 'home' 
    Button: 
     text: 'Login History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.88} 
     size: 150, 50 
     on_release: root.manager.current = 'loginhistory' 
    Button: 
     text: 'Alarm History' 
     background_color: [1, 2, 1, 2] 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.81} 
     size: 150, 50 
    Button: 
     text: 'User Management' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.74} 
     size: 150, 50 
     on_release: root.manager.current = 'usermanagement' 
    Button: 
     text: 'Call SoS' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.67} 
     size: 150, 50 
     on_release: root.manager.current = 'callsos' 
    Button: 
     text: 'Settings' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.60} 
     size: 150, 50 
     on_release: root.manager.current = 'settings' 
    Button: 
     text: 'Call RealTec' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.53} 
     size: 150, 50 
     on_release: root.manager.current = 'callrealtec' 
    Button: 
     text: 'Main Menu' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.46} 
     size: 150, 50 
     on_release: root.manager.current = 'menu' 
    BoxLayout: 
     size_hint: .5, None 
     height: 250 
     pos_hint: {'center_x': .5} 
     orientation: 'vertical' 

<UserManagementScreen>: 
    hue: random() 
    canvas: 
     Color: 
      hsv: self.hue, .5, .8 
     Rectangle: 
      size: self.size 
    Button: 
     text: 'Home' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.95} 
     size: 150, 50 
     on_release: root.manager.current = 'home' 
    Button: 
     text: 'Login History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.88} 
     size: 150, 50 
     on_release: root.manager.current = 'loginhistory' 
    Button: 
     text: 'Alarm History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.81} 
     size: 150, 50 
     on_release: root.manager.current = 'alarmhistory' 
    Button: 
     text: 'User Management' 
     background_color: [1, 2, 1, 2] 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.74} 
     size: 150, 50 
    Button: 
     text: 'Call SoS' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.67} 
     size: 150, 50 
     on_release: root.manager.current = 'callsos' 
    Button: 
     text: 'Settings' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.60} 
     size: 150, 50 
     on_release: root.manager.current = 'settings' 
    Button: 
     text: 'Call RealTec' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.53} 
     size: 150, 50 
     on_release: root.manager.current = 'callrealtec' 
    Button: 
     text: 'Main Menu' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.46} 
     size: 150, 50 
     on_release: root.manager.current = 'menu' 
    BoxLayout: 
     size_hint: .5, None 
     height: 250 
     pos_hint: {'center_x': .5} 
     orientation: 'vertical' 

<CallSoSScreen>: 
    hue: random() 
    canvas: 
     Color: 
      hsv: self.hue, .5, .7 
     Rectangle: 
      size: self.size 
    Button: 
     text: 'Home' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.95} 
     size: 150, 50 
     on_release: root.manager.current = 'home' 
    Button: 
     text: 'Login History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.88} 
     size: 150, 50 
     on_release: root.manager.current = 'loginhistory' 
    Button: 
     text: 'Alarm History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.81} 
     size: 150, 50 
     on_release: root.manager.current = 'alarmhistory' 
    Button: 
     text: 'User Management' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.74} 
     size: 150, 50 
     on_release: root.manager.current = 'usermanagement' 
    Button: 
     text: 'Call SoS' 
     background_color: [1, 2, 1, 2] 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.67} 
     size: 150, 50 
    Button: 
     text: 'Settings' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.60} 
     size: 150, 50 
     on_release: root.manager.current = 'settings' 
    Button: 
     text: 'Call RealTec' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.53} 
     size: 150, 50 
     on_release: root.manager.current = 'callrealtec' 
    Button: 
     text: 'Main Menu' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.46} 
     size: 150, 50 
     on_release: root.manager.current = 'menu' 
    BoxLayout: 
     size_hint: .5, None 
     height: 250 
     pos_hint: {'center_x': .5} 
     orientation: 'vertical' 

<SettingsScreen>: 
    hue: random() 
    canvas: 
     Color: 
      hsv: self.hue, .5, .5 
     Rectangle: 
      size: self.size 
    Button: 
     text: 'Home' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.95} 
     size: 150, 50 
     on_release: root.manager.current = 'home' 
    Button: 
     text: 'Login History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.88} 
     size: 150, 50 
     on_release: root.manager.current = 'loginhistory' 
    Button: 
     text: 'Alarm History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.81} 
     size: 150, 50 
     on_release: root.manager.current = 'alarmhistory' 
    Button: 
     text: 'User Management' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.74} 
     size: 150, 50 
     on_release: root.manager.current = 'usermanagement' 
    Button: 
     text: 'Call SoS' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.67} 
     size: 150, 50 
     on_release: root.manager.current = 'callsos' 
    Button: 
     text: 'Settings' 
     background_color: [1, 2, 1, 2] 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.60} 
     size: 150, 50 
    Button: 
     text: 'Call RealTec' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.53} 
     size: 150, 50 
     on_release: root.manager.current = 'callrealtec' 
    Button: 
     text: 'Main Menu' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.46} 
     size: 150, 50 
     on_release: root.manager.current = 'menu' 
    BoxLayout: 
     size_hint: .5, None 
     height: 250 
     pos_hint: {'center_x': .5} 
     orientation: 'vertical' 

<CallRealTecScreen>: 
    hue: random() 
    canvas: 
     Color: 
      hsv: self.hue, .5, .4 
     Rectangle: 
      size: self.size 
    Button: 
     text: 'Home' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.95} 
     size: 150, 50 
     on_release: root.manager.current = 'home' 
    Button: 
     text: 'Login History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.88} 
     size: 150, 50 
     on_release: root.manager.current = 'loginhistory' 
    Button: 
     text: 'Alarm History' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.81} 
     size: 150, 50 
     on_release: root.manager.current = 'alarmhistory' 
    Button: 
     text: 'User Management' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.74} 
     size: 150, 50 
     on_release: root.manager.current = 'usermanagement' 
    Button: 
     text: 'Call SoS' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.67} 
     size: 150, 50 
     on_release: root.manager.current = 'callsos' 
    Button: 
     text: 'Settings' 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.60} 
     size: 150, 50 
     on_release: root.manager.current = 'settings' 
    Button: 
     text: 'Call RealTec' 
     background_color: [1, 2, 1, 2] 
     size_hint: None, None 
     pos_hint: {'center_x':.05, 'center_y':.53} 
     size: 150, 50 
    Button: 
     text: 'Main Menu' 
     size_hint: None, None 
     pos_hint: {'center_x':0.05, 'center_y':0.46} 
     size: 150, 50 
     on_release: root.manager.current = 'menu' 
    BoxLayout: 
     size_hint: .5, None 
     height: 250 
     pos_hint: {'center_x': .5} 
     orientation: 'vertical' 


""") 

# Declare both screens 
class MenuScreen(Screen): 
    hue = NumericProperty(0) 
    pass 

class HomeScreen(Screen): 
    hue = NumericProperty(0) 
    pass 

class LoginHistoryScreen(Screen): 
    hue = NumericProperty(0) 
    pass 

class AlarmHistoryScreen(Screen): 
    hue = NumericProperty(0) 
    pass 

class UserManagementScreen(Screen): 
    hue = NumericProperty(0) 
    pass 

class CallSosScreen(Screen): 
    hue = NumericProperty(0) 
    pass 

class SettingsScreen(Screen): 
    hue = NumericProperty(0) 
    pass 

class CallRealTecScreen(Screen): 
    hue = NumericProperty(0) 
    pass 


sm = ScreenManager() 
sm.add_widget(MenuScreen(name='menu')) 
sm.add_widget(HomeScreen(name='home')) 
sm.add_widget(LoginHistoryScreen(name='loginhistory')) 
sm.add_widget(AlarmHistoryScreen(name='alarmhistory')) 
sm.add_widget(UserManagementScreen(name='usermanagement')) 
sm.add_widget(CallSosScreen(name='callsos')) 
sm.add_widget(CallRealTecScreen(name='callrealtec')) 
sm.add_widget(SettingsScreen(name='settings')) 

class TestApp(App): 

    def build(self): 
     return sm 

if __name__ == '__main__': 
    TestApp().run() 
+1

[ask]セクションをお読みください。コードやコードチェックのブランケットリクエストは一般的にここでは話題にはなりません。 – gung

答えて

0

私はあなたのコードを読んでいません。 Minimal, Complete, and Verifiable exampleを提供する必要があります。それはあなたが上に構築できる短い例がここにあると言いました。この例の主な利点は、トップレベルのウィジェットとしてScreenManagerを追加する必要がないことです。

from kivy.app import App 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.button import Button 
from kivy.uix.label import Label 


class Manager(ScreenManager): 

    def __init__(self, *args, **kwargs): 
     super(Manager, self).__init__(*args, **kwargs) 

     for i in range(4): 
      txt = 'Screen {}'.format(i) 
      lbl = Label(text=txt) 
      screen = Screen(name=txt) 
      screen.add_widget(lbl) 
      self.add_widget(screen) 


class Nav(GridLayout): 

    def __init__(self, sm=None, *args, **kwargs): 
     super(Nav, self).__init__(*args, **kwargs) 
     self.sm = sm 
     self.rows = 4 
     self.size_hint = (.2, 1) 
     for i in range(4): 
      self.add_widget(Button(text="Screen {}".format(i), on_release=self.change)) 

    def change(self, btn): 
     self.sm.current = btn.text 


class Root(BoxLayout): 

    def __init__(self, *args, **kwargs): 
     super(Root, self).__init__(*args, **kwargs) 
     self.orientation = "horizontal" 
     sm = Manager() 

     self.add_widget(Nav(sm=sm)) 
     self.add_widget(sm) 


class TestApp(App): 

    def build(App): 
     return Root() 


if __name__ == '__main__': 
    TestApp().run() 
+0

ご協力いただきありがとうございます。それは動作しますが、私はどのように別の画面(正面に切り替えられている他の画面のテキストボックス、アイコンなど)で動作することができます。 screen1で作業すると、その中にいくつかのオブジェクトが表示され、screen2には他のオブジェクトなどが表示されます。 – SufAB

+0

'screen'に基づいて新しいクラスを作成し、各スクリーンをインスタンス化してそのオブジェクトのプロパティと値を追加/アクセスできるようにしたいと思うでしょう。それを打ち、あなたが思いつくことができるものを見てください。その後、助けが必要な場合は、新しい質問を投稿することをお勧めします。 [This](https://pythonprogramming.net/kivy-screen-manager-tutorial/)はまともなチュートリアルです。 – Mox

+0

これがあなたの質問に答えるなら、私の答えを受け入れてください。ありがとう! – Mox

関連する問題