2013-07-02 4 views
0

Я новичок в Kivy (начался вчера), и я пытаюсь создать достаточно простое приложение, которое имеет поля ввода для нескольких значений высоты и области для вычисления томов. Я не могу найти какие-либо рабочие методы для этого. До сих пор все, что я получил это:Значения входных данных Kivy для простых вычислений

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen 


Builder.load_string(""" 
<MenuScreen>: 
    FloatLayout: 

     Label: 
      text: 'Please Select an Area to Work With:' 
      pos: 230, 490 
      size_hint: .15, .05 
      font_size: 23 



     Button: 
      text: "A" 
      pos: 230, 100 
      size_hint: .4,.1 
      font_size: 23 
      on_press: root.manager.current = 'settings' 


     Button: 
      text: "B" 
      pos: 230, 210 
      size_hint: .4,.1 
      font_size: 23 
      on_press: root.manager.current = 'settings' 


     Button: 
      text: "C" 
      pos: 230, 320 
      size_hint: .4,.1 
      font_size: 23 
      on_press: root.manager.current = 'settings' 



     Button: 
      text: "D" 
      pos: 230, 420 
      size_hint: .4,.1 
      font_size: 23 
      on_press: root.manager.current = 'settings' 






<SettingsScreen>: 
    GridLayout: 
     Label: 
      text: 'Room 1' 
      pos: 6, 460 
      size_hint: .15, .05 
      font_size: 23 

     Label: 
      text: 'Room 2' 
      pos: 6, 420 
      size_hint: .15, .05 
      font_size: 23 

     Label: 
      text: 'Room 3' 
      pos: 6, 380 
      size_hint: .15, .05 
      font_size: 23 

     Label: 
      text: 'Room 4' 
      pos: 6, 340 
      size_hint: .15, .05 
      font_size: 23 

     Label: 
      text: 'Room 5' 
      pos: 6, 300 
      size_hint: .15, .05 
      font_size: 23 

     Label: 
      text: 'Room 6' 
      pos: 6, 260 
      size_hint: .15, .05 
      font_size: 23 

     TextInput: 
      text1: "0" 
      multiline: False 
      pos: 200,420 
      font_size: 23 
      on_text: viewer.text = self.text1 
      size_hint: .001, .001 

     TextInput: 
      text2: "0" 
      multiline: False 
      pos: 200, 420 
      font_size: 23 
      on_text: viewer.text = self.text2 
      size_hint: .001, .001 

     TextInput: 
      text3: "0" 
      multiline: False 
      pos: 200,380 
      font_size: 23 
      on_text: viewer.text = self.text3 
      size_hint: .001, .001 

     TextInput: 
      text4: "0" 
      multiline: False 
      pos: 200,340 
      font_size: 23 
      on_text: viewer.text = self.text4 
      size_hint: .001, .001 


     TextInput: 
      text5: "0" 
      multiline: False 
      pos: 200,300 
      font_size: 23 
      on_text: viewer.text = self.text5 
      size_hint: .001, .001 

     TextInput: 
      text6: "0" 
      multiline: False 
      pos: 200,240 
      font_size: 23 
      on_text: viewer.text = self.text6 
      size_hint: .001, .001 
""") 

# Declare both screen 
class MenuScreen(Screen): 
    pass 

class SettingsScreen(Screen): 
    pass 

# Create the screen manager 
sm = ScreenManager() 
sm.add_widget(MenuScreen(name='menu')) 
sm.add_widget(SettingsScreen(name='settings')) 

class TestApp(App): 

    def build(self): 
     return sm 

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

планирования Im, чтобы иметь вторую страницу уникальную для каждой нажатой кнопки, но хочет Любой помощь будет оценена.

+0

Какова конкретная проблема, с которой вы сталкиваетесь? Вы видите какую-то ошибку? – andersschuller

ответ

1

Надеюсь, я понял ваш вопрос. Вы просите способы сделать это. Простой ответ заключается в том, что у вас есть весь Python для выполнения всех операций, которые вы хотите. Kivy - это библиотека, которая предоставляет множество компонентов для разработки графического интерфейса. Он также предоставляет вам язык, который анализируется с помощью Builder.load_string(). Вот пример, который может быть более или менее того, что вы ищете. Это своего рода калькулятор на первом экране. Второй экран пуст, и вы можете перемещаться между ними с помощью нижних кнопок.

Калькулятор на первом экране имеет два InputTexts и две кнопки (Sum и Product). Кнопка Sum имеет реализацию суммы непосредственно на языке киви. Кнопка Product вызывает метод в корне (экземпляр Calc). Метод не существует сам по себе. Я создал в коде python под секцией kivy. Есть некоторые комментарии к коду для того, что я говорю.

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.floatlayout import FloatLayout 

Builder.load_string(""" 
<Calc>: 
    # This are attributes of the class Calc now 
    a: _a 
    b: _b 
    result: _result 
    AnchorLayout: 
     anchor_x: 'center' 
     anchor_y: 'top' 
     ScreenManager: 
      size_hint: 1, .9 
      id: _screen_manager 
      Screen: 
       name: 'screen1' 
       GridLayout: 
        cols:1 
        TextInput: 
         id: _a 
         text: '3' 
        TextInput: 
         id: _b 
         text: '5' 
        Label: 
         id: _result 
        Button: 
         text: 'sum' 
         # You can do the opertion directly 
         on_press: _result.text = str(int(_a.text) + int(_b.text)) 
        Button: 
         text: 'product' 
         # Or you can call a method from the root class (instance of calc) 
         on_press: root.product(*args) 
      Screen: 
       name: 'screen2' 
       Label: 
        text: 'The second screen' 
    AnchorLayout: 
     anchor_x: 'center' 
     anchor_y: 'bottom' 
     BoxLayout: 
      orientation: 'horizontal' 
      size_hint: 1, .1 
      Button: 
       text: 'Go to Screen 1' 
       on_press: _screen_manager.current = 'screen1' 
      Button: 
       text: 'Go to Screen 2' 
       on_press: _screen_manager.current = 'screen2'""") 

class Calc(FloatLayout): 
    # define the multiplication of a function 
    def product(self, instance): 
     # self.result, self.a and self.b where defined explicitely in the kv 
     self.result.text = str(int(self.a.text) * int(self.b.text)) 

class TestApp(App): 
    def build(self): 
     return Calc() 

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