2016-09-02 18 views
3

kivyには何かがありますが、私は理解しておらず、誰かが光を放つことを望んでいます。私はこのトピックで多くの読書をしましたが、それは私の頭の中でつながっているようには見えません。Kivyボタンを機能にリンクする

私の問題は、関数をkivyボタンにリンクすることに由来します。 今、私は簡単な関数を行う方法を学習しようとしています:私は、より複雑な何かやりたい何

def Math(): 
    print 1+1 

を:

abがkivyから入力ラベルです
def Math(a,b): 
    print a^2 + b^2 

をし、ボタンをクリックすると、回答が印刷されます。

これは私がこれまで持っているものです。

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition 
from kivy.uix.widget import Widget 
from kivy.uix.floatlayout import FloatLayout 


#######``Logics``####### 
class Math(FloatLayout): 
    def add(self): 
     print 1+1 

#######``Windows``####### 
class MainScreen(Screen): 
    pass 

class AnotherScreen(Screen): 
    pass 

class ScreenManagement(ScreenManager): 
    pass 


presentation = Builder.load_file("GUI_Style.kv") 

class MainApp(App): 
    def build(self): 
     return presentation 

if __name__ == "__main__": 
    MainApp().run() 

これは私のkivy言語ファイルです:

import NoTransition kivy.uix.screenmanager.NoTransition 

ScreenManagement: 
    transition: NoTransition() 
    MainScreen: 
    AnotherScreen: 

<MainScreen>: 
    name: "main" 
    FloatLayout: 
     Button: 
      on_release: app.root.current = "other" 
      text: "Next Screen" 
      font_size: 50 
      color: 0,1,0,1 
      font_size: 25 
      size_hint: 0.3,0.2 
      pos_hint: {"right":1, "top":1} 

<AnotherScreen>: 
    name: "other" 
    FloatLayout: 
     Button: 
      color: 0,1,0,1 
      font_size: 25 
      size_hint: 0.3,0.2 
      text: "add" 
      pos_hint: {"x":0, "y":0} 
      on_release: root.add 
     Button: 
      color: 0,1,0,1 
      font_size: 25 
      size_hint: 0.3,0.2 
      text: "Back Home" 
      on_release: app.root.current = "main" 
      pos_hint: {"right":1, "top":1} 

答えて

1
<AnotherScreen>: 
    name: "other" 
    FloatLayout: 
     Button: 
      ... 
      on_release: root.add <-- here *root* evaluates to the top widget in the rule. 

AnotherScreenインスタンスであるが、それはaddを持っていません方法。

class Math(FloatLayout): 
    def add(self): 
     print 1+1 

ここでは、UIXコンポーネント-a widget-あるFloatLayout、から継承してMathクラスを宣言しました。そして、あなたはこのクラスのメソッドを定義しましたadd。まだあなたはそれを使用していません。 kvファイルではFloatLayoutを使用しました。

今、あなたはKVで機能にアクセスするためには、ほとんどの時間は、あなたがroot/selfまたはappのいずれかを使用することにより、UIXコンポーネントのメソッドとしてそれをアクセスもよ、あなたはまた、例えば、それをインポートすることができます。

#: import get_color_from_hex kivy.utils.get_color_from_hex 
<ColoredWidget>: 
    canvas: 
     Color: 
      rgba: get_color_from_hex("DCDCDC") 
     Rectangle: 
      size: self.size 
      pos: self.pos 

だから、このようにそれを行うことはできません。

<AnotherScreen>: 
    name: "other" 
    Math: 
     id: math_layout 
     Button: 
      ... 
      on_release: math_layout.add() 

またはこのような:

class AnotherScreen(Screen): 
    def add(self): 
     print(1+1) 

このトピックで問題が解決しない場合は、より多くのヘルプを提供できてうれしく思います。

関連する問題