2017-06-21 3 views
-1

Sooooo Ich arbeite immer noch an diesem Schulprojekt von meiner letzten Frage und dieses Mal ist es ein Prototyp, kein Test. Es soll Gleichungen lösen. Ich habe bereits den Code in Vanille Python und TkInter geschrieben und das funktioniert. Es hat auch Teile von Deutsch drin. Mein Kampf ist, wie man vom TextInput zum procesing Teil Strings bekommt und es zum Label Lös bringt. So, hier ist mein Code:Kivy fehlt 1 Positionsargument (selbst)

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.label import Label 
from kivy.uix.textinput import TextInput 
from kivy.clock import Clock 
from kivy.uix.button import Button 

a=42 

class übung(GridLayout): 
    def __init__(self, **kwargs): 
     super(übung, self).__init__(**kwargs) 
     self.cols = 3 
     self.fill1 = Label(text = "") 
     self.label1 = Label(text = "Sagen sie ihre Gleichung") 
     self.fill2 = Label(text = "") 
     self.links = TextInput(multiline=False) 
     self.label2 = Label(text = '=') 
     self.rechts = TextInput(multiline=False) 
     self.fill3 = Label(text = '') 
     self.btn1 = Button(text="Lösen") 
     self.btn1.bind(on_press=self.einfach()) 
     self.fill4 = Label(text = '') 
     self.fill5 = Label(text = '') 
     self.btn2 = Button(text="Mit Rechenweg lösen") 
     self.btn2.bind(on_press=self.einfachS) 
     self.fill6 = Label(text = '') 
     self.fill7 = Label(text = '') 
     self.lös = Label(text = '') 
     self.fill8 = Label(text = '') 
     self.fill9 = Label(text = '') 
     self.rech1 = Label(text = '') 
     self.fill10 = Label(text = '') 
     self.fill11 = Label(text = '') 
     self.rech2 = Label(text = '') 
     self.fill12 = Label(text = '') 
     self.fill13 = Label(text = '') 
     self.rech3 = Label(text = '') 
     self.fill14 = Label(text = '') 
     self.fill15 = Label(text = '') 
     self.rech4 = Label(text = '') 


     self.add_widget(self.fill1) 
     self.add_widget(self.label1) 
     self.add_widget(self.fill2) 
     self.add_widget(self.links) 
     self.add_widget(self.label2) 
     self.add_widget(self.rechts) 
     self.add_widget(self.fill3) 
     self.add_widget(self.btn1) 
     self.add_widget(self.fill6) 
     self.add_widget(self.fill7) 
     self.add_widget(self.btn2) 
     self.add_widget(self.fill8) 
     self.add_widget(self.fill9) 
     self.add_widget(self.lös) 
     self.add_widget(self.fill4) 
     self.add_widget(self.fill5) 
     self.add_widget(self.rech1) 
     self.add_widget(self.fill10) 
     self.add_widget(self.fill11) 
     self.add_widget(self.rech2) 
     self.add_widget(self.fill12) 
     self.add_widget(self.fill13) 
     self.add_widget(self.rech3) 
     self.add_widget(self.fill14) 
     self.add_widget(self.fill15) 
     self.add_widget(self.rech4) 





    def einfach(event, self): 
     r = self.rechts.text 
     l = self.links.text 
     x = 'x' 
     if x in l: 
      r1,r2 = r.split ('+')      
      rr = float(r1) + float(r2) 
      lr, ll = l.split('x') 
      lr = float(lr) 
      end = rr/lr 
      end = float (end) 
      self.lös.text = end 
     elif x in r: 
      l1,l2 = l.split ('+')      
      ll = float(l1) + float(l2) 
      rl, rr = r.split('x') 
      rl = float(rl) 
      end = ll/rl 
      end = float(end) 
      self.lös.text = end 



    def einfachS(self, event): 
     print ('nein') 



class App(App): 
    def build(self): 
     return übung() 


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

Wie Sie sehen, es ist sehr kompakt, aber ich denke, es ist nur readyy für rund 1% Also ja. Vielen Dank im Voraus, mich

+0

'def einfach (event, self)' ... Meinst du, die Reihenfolge dort zu wechseln? –

+0

Oh ja. Aber wenn ich es wechsle, sagt es jetzt, dass das Ereignis fehlt. – Banana

+0

Klammern entfernen. 'on_press = self.einfach()' –

Antwort

1

Dieses:

self.btn1.bind(on_press=self.einfach()) 

genau die gleiche ist wie folgt aus:

result = self.einfach() 
self.btn1.bind(on_press=result) 

Wenn Sie binden Funktionen Tasten müssen Sie die Taste ein aufrufbar geben. Das heißt, eine Referenz an eine Funktion. Stattdessen rufen Sie eine Funktion auf und übergeben das Ergebnis.

Die Lösung ist Ihre Bindungen zu ändern wie folgt (man beachte das Fehlen von ()) zu sein:

self.btn1.bind(on_press=self.einfach) 

Außerdem müssen Sie dies ändern:

def einfach(event, self): 

... zu dies:

def einfach(self, event): 
Verwandte Themen