2017-05-26 22 views
0

注:私はプログラマーではなく、私が使用すべき正確な用語を知らない。これは基本的なプログラムであり、リテラルの「kivyスクリーン」やkivyスクリーンマネージャーを使用しようとはしていません。Python - kivyアプリケーションに2番目の「スクリーン」を追加するにはどうすればよいですか?

私はこの問題を解決しようとしているGoogleの全面的な検索に時間を費やしています。私はpython kivyプログラムを持っています。私は最初の開始画面を作成しました。ユーザーが特定のゲームをクリックすると、最初の画面ですべてのデータを消去し、ボタンとラベルを画面に配置します。ほぼ「新しい」画面に似ています。私は現在、ユーザーがゲームを選択したときに画面をクリアする場所に持っていますが、この画面にボタンを追加しようとすると、メイン画面にボタンが表示されます。

これは私のPythonコードである:ここで

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.uix.dropdown import DropDown 

class MadLib(Widget): 
    pass 

class MadlibApp(App): 
    def build(self): 
     return MadLib() 

app = MadlibApp() 

if __name__ == '__main__': 
    app.run() 

は私の.kvファイルです:

<MadLib>: 
    canvas: 
     Color: 
      rgba: 0.2, 0.8, 0.2, 1 
     Rectangle: 
      pos: 0, 0 
      size: self.width, self.height 


    Button: 
     tag: 'exit' 
     background_color: 0, 0, 0, 0 
     height: 100 
     width: 100 
     center_x: root.width - self.width/2 
     top: root.top 
     on_press: app.stop() 
     Image: 
      source: r"C:\Users\kraak\Desktop\Python\Python\basicexitbutton.gif" 
      top: root.top 
      center_x: root.width - self.width/2 
      size_hint_y: None 
      height: '96dp' 

    Button: 
     tag: 'menu' 
     background_color: 0, 0, 0, 0 
     id: btn 
     top: root.top - 10 
     center_x: self.width/2 + 10 
     on_release: dropdown.open(self) 
     size_hint_y: None 
     height: '48dp' 
     width: '175dp' 
     Image: 
      source: r"C:\Users\kraak\Desktop\Python\Python\basicmenubutton.gif" 
      top: root.top + 10 
      center_x: self.width/2 
      size_hint_y: None 
      height: '96dp' 

    Widget: 
     on_parent: dropdown.dismiss() 

    DropDown: 

     id: dropdown 
     on_select: btn.text = '{}'.format(args[1]) 

     Button: 
      center_x: self.width/2 
      text: 'Browse' 
      font_size: '32' 
      background_color: 0, 0 ,0, 0 
      size_hint_y: None 
      height: '48dp' 
      on_release: dropdown.select('A') 

     Button: 
      text: 'Categories' 
      font_size: '32' 
      background_color: 0, 0 ,0, 0 
      size_hint_y: None 
      height: '48dp' 
      on_release: dropdown.select('B') 

     Button: 
      text: 'Settings' 
      font_size: '32' 
      background_color: 0, 0 ,0, 0 
      size_hint_y: None 
      height: '48dp' 
      on_release: dropdown.select('C') 

    Button: 
     text: 'Game 1' 
     font_size: '32' 
     background_color: 0, 0 ,0, 0 
     size_hint_y: None 
     height: '48dp' 
     top: root.top/1.33 
     center_x: root.width/4 
     on_press: root.clear_widgets() 

    Button: 
     text: 'Game 2' 
     font_size: '32' 
     background_color: 0, 0 ,0, 0 
     size_hint_y: None 
     height: '48dp' 
     top: root.top/1.66 
     center_x: root.width/4 
     on_release: dropdown.select('C') 

<Game1>: 
    Button: 
     id: tst 
     text: 'Test' 
     font_size: '32' 
     background_color: 0, 0 ,0, 0 
     size_hint_y: None 
     height: '48dp' 
     top: root.top 
     center_x: root.width/4 

ユーザがゲーム1をクリックすると、私はそれがゲーム1クラスにジャンプしたいですしかし、それはプログラムがまだ存在しないことを知らないのでできません。私はこれを修正する方法についてはわかりません。

答えて

1

あなたはスクリーンについて話していますが、実際のキビースクリーンは使用していないようです。あなたはScreenManagerを持っている必要がありますし、あなたのウィジェットを置くことができる別のScreenオブジェクトを作成する必要があります。

Googleの「kivy screens」の文字通りの最初の結果です。次回は宿題をしてください。

ここでは、既存のコードを画面を適切に使用するものに変換する方法について簡単に説明します。

<[email protected]>: 
    text: "I'm first" 

<[email protected]>: 
    text: "I'm second..." 

は、あなたが最初のボタンを一つの画面と別の二番目になりたい:あなたは、次の.kvコードを持って考えてみましょう。まず、 Screenにしてください。通常は、ルートウィジェットを画面に変更し、他のすべてのウィジェットを画面に移動します。例は次のようになります。あなたは今、画面マネージャが必要

<[email protected]>: 
    name: "first_screen" # a name is like an id but only for the screen manager 
    Button: 
     text: "I'm first" 

<[email protected]>: 
    name: "second_screen" 
    Button: 
     text: "I'm second..." 

。その中に、使用するすべての画面を追加します。私はそれをルートウィジェットにするつもりです。また、最初の画面のボタンを押すと2番目の画面に切り替わるようにします。

ScreenManager: 
    First: 
    Second: 

<[email protected]>: 
    name: "first_screen" 
    Button: 
     text: "I'm first" 
     # root.manager.current is magic that gives you the current screen manager 
     on_release: root.manager.current = "second_screen" 

<[email protected]>: 
    name: "second_screen" 
    Button: 
     on_release: root.manager.current = "first_screen" 
     text: "I'm second..." 

それだけです!トランジションタイプやその他の詳細を変更するには、docsをご覧ください。

from kivy.base import runTouchApp 
from kivy.lang import Builder 

runTouchApp(Builder.load_string(""" 
ScreenManager: 
    First: 
    Second: 

<[email protected]>: 
    name: "first_screen" # a name is like an id but only for the screen manager 
    Button: 
     text: "I'm first" 
     # root.manager.current is magic that gives you the current screen manager 
     on_release: root.manager.current = "second_screen" 

<[email protected]>: 
    name: "second_screen" 
    Button: 
     on_release: root.manager.current = "first_screen" 
     text: "I'm second..." 
      """)) 
+0

私は文字通りの画面を使用しようとしていないよ。これの.pyファイルを実行して、この例を見てみることを

。基本的なプログラムを作って、できるだけシンプルにしておきたいだけです。私は経験プログラマーではないので、私が使用すべき正確な用語を知らない。 –

+0

心配しないで、本当にシンプルです。また、用語は簡単です.1つの画面だけを含むことができるScreenManagerウィジェットがあります。次に、既に持っているウィジェットを含むことができるスクリーンがあります。いくつかの[examples](https://kivy.org/docs/api-kivy.uix.screenmanager.html#basic-usage)を見てください。任意のコードを変更する必要はなく、わずか10-15行程度です。立ち往生したときに返信してください。 –

+0

ありがとうございます。私はそれを試してみると思います。次回の学期に向けてプログラムをさらに進歩させるのに役立つかもしれません。 –

関連する問題