2016-10-26 3 views
0

Ich versuche, die Position einer Schaltfläche mit dem Index einer Liste zu verknüpfen. Ich habe eine Liste mit vielen Namen und eine weitere Liste mit vielen numerischen Werten. Ich möchte eine Funktion erstellen, die die Position (oder einen anderen Parameter) ihrer Schaltfläche übernimmt und ihre Schaltfläche einem Index der Liste zuordnet.Variable Funktion als Position

Zum Beispiel: wenn ich auf die erste Schaltfläche klicke, nimmt die Funktion den ersten Namen der Liste und nimmt den ersten numerischen Wert der anderen Liste. Also habe ich den letzten Knopf gedrückt, und die Funktion nimmt den letzten Namen der Liste und den letzten numerischen Wert der anderen Liste.

Ich habe es geschafft, viele Funktionen als Werte zu erstellen, aber ich denke, dass es einen intelligenteren Weg gibt, dies zu tun.

Py

n = ["a", "b", "c", "d"] 
v = [10, 20, 30, 40] 
x = 0 
y = [] 
i = 0 
class PrimeiroScreen(Screen): 
    def __init__(self, **kwargs): 
     self.name = 'um' 
     super(Screen,self).__init__(**kwargs) 

    def fc1(self, *args):#I don't know how to make i variable as button position 
     global x 
     x = x + v[i] 
     y.append(n[i]) 
     print (x) 
     print (y) 

.kv

<PrimeiroScreen>: 
    StackLayout: 
     orientation: 'tb-lr' 
     GridLayout: 
      cols: 2 
      spacing: 10, 10 
      #padding: 0, 0 
      size_hint: (1,.8) 
      Button: 
       text: "[b]Btn1[/b]" 
       markup: True 
       on_press: root.fc1() 
      Button: 
       text: "[b]Btn2[/b]" 
       font_size: '20dp' 
       markup: True 
       on_press: root.fc1() 
      Button: 
       text: "[b]Btn3[/b]" 
       font_size: '20dp' 
       markup: True 
       on_press: root.fc1() 
      Button: 
       text: "[b]Btn4[/b]" 
       font_size: '20dp' 
       markup: True 
       on_press: root.fc1() 
+0

Sie müssen das Observable-Muster verwenden. Wie ich mich erinnere, hat der Kivy bereits einen Basistyp für beobachtete Sammlungen. – pylover

+0

Ich habe keine Ahnung was das ist. Weißt du wo ich Informationen finde? – victorcd

Antwort

1

In Ihrem Fall würde ich nur auf die Schaltfläche Position in die FC1 Funktion haben Sie

.... 

    GridLayout: 
     cols: 2 
     spacing: 10, 10 
     #padding: 0, 0 
     size_hint: (1,.8) 
     Button: 
      text: "[b]Btn1[/b]" 
      markup: True 
      on_press: root.fc1(1) #woohoo!!! 
     Button: 
      text: "[b]Btn2[/b]" 
      font_size: '20dp' 
      markup: True 
      on_press: root.fc1(2) 
     Button: 
      text: "[b]Btn3[/b]" 
      font_size: '20dp' 
      markup: True 
      on_press: root.fc1(3) 
     Button: 
      text: "[b]Btn4[/b]" 
      font_size: '20dp' 
      markup: True 
      on_press: root.fc1(4) 

und jetzt senden:

def fc1(self, i): 
    global x 

    x = x + v[i] 
    y.append(n[i]) 
    print (x) 
    print (y) 
+1

sehr danke! Der einfachste Weg dazu, es hat für mich funktioniert. – victorcd

Verwandte Themen