2013-11-03 4 views
0

Я новичок на python, а теперь делаю словарь с kivy. Проблема заключается в том, когда я печатаю текст, он не работает. Ниже я просто хочу проверить, работает ли он или нет, поэтому я добавил несколько всплывающих окон, а если текст ввода - 'a', тогда распечатайте true. Это просто проверка, что это работает или нет, надеюсь, что вы, ребята, поможете мне, спасибо.Python kivy text input

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.uix.button import Button 
from kivy.lang import Builder 
from kivy.uix.popup import Popup 
from kivy.uix.bubble import Bubble 

class CustomPopup(Popup): 
    pass 

class Diction(GridLayout): 

    def __init__(self, **kwargs): 
     super(Diction, self).__init__(**kwargs) 
     self.cols=2 
     self.add_widget(Label(text="Search")) 
     self.search=TextInput(multiline=False) 
     self.add_widget(self.search) 
     if self.search=='A': 
      print 'True' 
     else: 
      print 'False' 
     self.add_widget(Button(text="click",on_press=self.show_popup)) 
    def show_popup(self, b): 
     p = CustomPopup() 
     p.open() 

class MyApp(App): 
    def build(self): 
     return LoginScreen() 

if __name__=="__main__": 
    MyApp().run() 
+0

Если вы хотите сделать ** kivy ** распечатать что-то на экране, вам нужно использовать инструменты в библиотеке _widgets_. Я думаю, что использование только _print_ не будет работать. Таким образом, часть внутри **, если ** просто ничего не делает. Попробуйте вызвать и событие, если True или False, и вы проверите условие. – tuned

ответ

0

Есть две причины, почему не работает:

  1. if должен быть метод, который обрабатывает события, т.е. show_popup
  2. Вы должны сравнить text в Label, а не Label себя. Вместо self.search=='A', вы должны использовать self.search.text=='A'

Вот исправленный __init__ и show_popup код:

class Diction(GridLayout): 

    def __init__(self, **kwargs): 
     super(Diction, self).__init__(**kwargs) 
     self.cols=2 
     self.add_widget(Label(text="Search")) 
     self.search=TextInput(multiline=False) 
     self.add_widget(self.search) 
     self.add_widget(Button(text="click",on_press=self.show_popup)) 

    def show_popup(self, b): 
     if self.search.text=='A': 
      print 'True' 
     else: 
      print 'False' 
     p = CustomPopup() 
     p.open() 

Альтернативный подход с использованием Kivy языка

Kivy мог Язык поможет вам получить более чистый код. Ваш код может выглядеть так:

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout 
# DON'T forget to import Label!!! 
from kivy.uix.label import Label 
from kivy.uix.popup import Popup 
from kivy.lang import Builder 

Builder.load_string(""" 
<[email protected]>: 
    title: "My Custom Poput"  

<[email protected]>: 
    cols: 2 
    search: id_search 
    Label: 
     text: "Search" 
    TextInput: 
     id: id_search 
    Button: 
     text: "click" 
     on_press: root.show_popup(self) 
""") 

class CustomPopup(Popup): 
    pass 

class Diction(GridLayout):  
    def show_popup(self, b): 
     if self.search.text=='A': 
      print 'True' 
     else: 
      print 'False' 
    # You can send any content to the popup with the content attribute 
    CustomPopup(content=Label(text=self.search.text)).open() 

class MyApp(App): 
    def build(self): 
     return Diction() 

Это помогает отделить логику от интерфейса. Вы можете даже хранить в отдельных файлах, если используете функцию load_file вместо load_string.

+0

Большое вам спасибо, что имеет для меня большой смысл, кстати, если я хочу показать свой перевод на всплывающее окно! я должен написать это вот так? _CustomPopup (текст = "self.search.text") или на языке kv : текст: self.search.text ??? _ – Zorig

+0

Я не уверен, насколько понимаю ваш вопрос. (1) Я могу сказать, что 'Popup' не имеет атрибута' text'. Вы имеете в виду название? или вы имеете в виду «Виджет» (возможно, «Ярлык») с текстом? (2) Второй вариант неверен, потому что 'search' не принадлежит' CustomPopup'. Я попробую дать вам еще один пример, но лучше спросите у него другой вопрос, так что больше ppl прочитает его и ответит. –

+0

Я изменяю пример, чтобы вы могли отправить 'content' в свой' CustomPopup'. Вероятно, вам не нужен «CustomPopup», возможно, было бы более полезно иметь «CustomContent». Свойство 'content'' Custom' будет принимать любой виджет. –