2016-07-07 67 views
0

整个代码运行良好。但当你去:用于打印文本输入的按钮不起作用

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

它不工作,我不知道这个问题。这是下面的代码。任何帮助将不胜感激

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() 

回答

2

你的代码格式是可怕的,但至少你没有使用反引号。对于将来的案例,复制&粘贴你想要在这里展示的整个示例,然后选择该示例(整体)并按Ctrl + K,这将缩进所有选定的行,以便它看起来很好。

代码工作究竟是如何工作的,因为root.print_text()目标add_new_student类及其children - 不GridLayout要访问。

for这一行编辑为:for child in reversed(self.children[0].children):,你很好走。 :)

或更有效的解决办法是获取Screen表现为布局太,您可以与无论从Screen和一些布局inheritting得到,但要确保布局第一

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

我会利用这个,感谢照顾它的工作:) –

+0

@SheenaWadhwa所以是thhe答案接受或不? – EL3PHANTEN

+0

我接受之前,但由于互联网问题,它没有被选中....感谢您的帮助 –