2016-07-07 9 views
0

Der ganze Code funktioniert gut. Aber wenn u gehen zu:Taste zum Drucken der Texteingabe funktioniert nicht

student > Add New student > > Fill all columns of new student > then submit 

es nicht funktioniert und ich kann nicht das Problem herauszufinden. Hier ist der folgende Code. Jede Hilfe wird geschätzt werden

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen ,FadeTransition 
from kivy.uix.button import Button 
from kivy.uix.gridlayout import GridLayout 
import csv 
from kivy.uix.textinput import TextInput 

Builder.load_string(""" 
<MenuScreen>: 
    BoxLayout: 
     Button: 
      text: 'Teacher' 
      on_press: root.manager.current = 'screen1' 
     Button: 
      text: 'Student ' 
      on_press:root.manager.current = 'screen2' 
     Button: 
      text: 'Quit' 

<Screen1>: 
    BoxLayout: 

    Button: 
     text: 'Teacher Info' 
     #on_press:root.manager.current = 'login' 
    Button: 
     text: 'Teacher Attandance' 
    Button: 
     text: 'Add New Teacher' 
     on_press:root.manager.current = 'add_teacher' 
    Button: 
     text: 'Back' 
     on_press:root.manager.current ='menu' 


<add_new_teacher>: 
    GridLayout: 
     cols:2 

    Label: 
     text:'Name' 
    TextInput: 
     id: name_input 
     multiline: False 

    Label: 
     text:'Father Name' 
    TextInput: 
     id: name_input 
     multiline: False 

    Label: 
     text: 'Mother Name' 
    TextInput: 
     id: name_input 
     multiline: False 

    Label: 
     text: 'Class' 
    TextInput: 
     id: name_input 
     multine: False 

    Label: 
     text:'Roll no.' 
      text: 'Student Info' 
      on_press:root.csv_std() 
     Button: 
      text: 'Student Attandance' 
      # on_press:root.manager.current ='login' 
     Button: 
      text: 'Add New Student' 
      on_press:root.manager.current = 'add_student' 

     Button 
      text: 'Back' 
      on_press:root.manager.current = 'menu' 

<add_new_student>: 
    GridLayout: 
     cols:2 

     Label: 
      text:'Name' 
     TextInput: 
      id: self.name 
      multiline: False 

     Label: 
      text:'Father Name' 
     TextInput: 
      id: self.fname 
      multiline: False 

     Label: 
      text: 'Mother Name' 
     TextInput: 
      id: self.mname 
      multiline: False 

     Label: 
      text: 'Class' 
     TextInput: 
      id: self.c 
      multine: False 

     Label: 
      text:'Roll no.' 
     TextInput: 
      id: self.r 
      multiline:False 


     Button: 
      text:'Print' 


     Button: 
      text:'Submit' 
      on_press:root.print_text() 

     Button: 
      text:'Back' 
      on_press:root.manager.current= 'screen2' 

""") 

# Declare both screens 
class MenuScreen(Screen): 
    pass 
class add_new_teacher(Screen): 

    pass 
class Screen1(Screen): 
    pass 
class Screen2(Screen): 
    def csv_std(self): 
     f = open("a.csv", 'r') 
     reader = csv.reader(f) 
     for row in reader: 
      print(" ".join(row)) 
    pass 
class add_new_student(Screen): 
    def print_text(self): 
     for child in reversed(self.children): 
      if isinstance(child, TextInput): 
       print child.text 
    pass 


# Create the screen manager 
sm = ScreenManager() 
sm.add_widget(MenuScreen(name='menu')) 
sm.add_widget(add_new_teacher(name='add_teacher')) 
sm.add_widget(add_new_student(name='add_student')) 
sm.add_widget(Screen1(name='screen1')) 
sm.add_widget(Screen2(name='screen2')) 

class TestApp(App): 

    def build(self): 
     return sm 

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

Antwort

2

Sie Code-Formatierung war schrecklich, aber zumindest haben Sie nicht Backticks. Für zukünftige Fälle, kopieren Sie & fügen Sie Ihr ganzes Beispiel, das Sie hier zeigen möchten, dann wählen Sie das Beispiel (ganz) und drücken Sie Ctrl + K, die alle ausgewählten Zeilen einrücken, so dass es in Ordnung aussehen würde.

Der Code funktioniert genau, wie es funktionieren soll, weil root.print_text() Ziele add_new_student Klasse und ihre children - nicht GridLayout, die Sie zugreifen möchten.

Bearbeiten Sie die Zeile mit for zu diesem: for child in reversed(self.children[0].children): und Sie sind gut zu gehen. :)

Oder effizientere Lösung wäre zu bekommen, dass Screen auch als Layout verhalten, die Sie mit inheritting sowohl von Screen und einige Layout bekommen können, aber sicher, das Layout ist erste:

class add_new_student(GridLayout, Screen): 
    def print_text(self): 
     for child in reversed(self.children): 
      if isinstance(child, TextInput): 
       print child.text 

kv:

<add_new_student>: 
    cols:2 

    Label: 
     text:'Name' 
+1

ich darum kümmern wird und dank funktionierte es :) –

+0

@SheenaWadhwa so thhe Antwort akzeptiert ist oder nicht ? – EL3PHANTEN

+0

Ich akzeptierte das vorher, aber wegen Internet-Problem wurde es nicht ausgewählt .... Danke für die Hilfe –

Verwandte Themen