2016-07-07 39 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

我接受之前,但由於互聯網問題,它沒有被選中....感謝您的幫助 –