2014-01-12 3 views
0

Я пытаюсь разработать приложение kaivy, я довольно новичок в этом. Я попытался сделать простой экран с двумя кнопками, но я вижу только одну кнопку (button1, check in). Я хочу показать две кнопки бок о бок. Любая помощь высоко ценится.Kivy Не показывать две кнопки

from kivy.app import App 
from kivy.lang import Builder 

button1 = ''' 
FloatLayout: 

    Button: 
     text: 'Check In' 
     size_hint: None, None 
     pos_hint: {'center_x': .5, 'center_y': .5} 
     canvas.before: 
      PushMatrix 
      Rotate: 
       angle: 0 
       origin: self.center 
     canvas.after: 
      PopMatrix 
''' 

button2 = ''' 
FloatLayout: 

    Button: 
     text: 'SOS' 
     size_hint: None, None 
     pos_hint: {'center_x': 1.5, 'center_y': 1.5} 
     canvas.before: 
      PushMatrix 
      Rotate: 
       angle: 45 
       origin: self.center 
     canvas.after: 
      PopMatrix 
''' 

class RotationApp(App): 
    def build(self): 
     return Builder.load_string(button1) 
    def build2(self): 
     return Builder.load_string(button2) 

RotationApp().run() 

ответ

1

Когда приложение запускается, kivy запускает метод build и использует возвращаемый виджет в качестве корневого виджета. В вашем случае вы возвращаете кнопку из своей строки button1 и все, это делается.

Проблема заключается в том, что kivy не знает и не заботится о том, чтобы вы написали метод build2, он не называет его и не знает, что делать с возвращенным виджетами, даже если он это сделал.

Существует множество способов создать две соседние кнопки, и я не уверен, какова ваша общая цель, но простой вариант - это просто изменить одну из ваших строк на языке kv, чтобы содержать две кнопки в одном макете. Я заменил FloatLayout с BoxLayout, который автоматически изменяет их примыкать:

button1 = ''' 
BoxLayout: 
    Button: 
     text: 'Check In' 
     size_hint: None, None 
     pos_hint: {'center_x': .5, 'center_y': .5} 
     canvas.before: 
      PushMatrix 
      Rotate: 
       angle: 0 
       origin: self.center 
     canvas.after: 
      PopMatrix 
    Button: 
      text: 'SOS' 
      size_hint: None, None 
      pos_hint: {'center_x': 1.5, 'center_y': 1.5} 
      canvas.before: 
       PushMatrix 
       Rotate: 
        angle: 45 
        origin: self.center 
      canvas.after: 
       PopMatrix 

''' 

Я не пробовал этот код, и вы можете получить некоторое странное поведение/перекрывание с вашего вращения, но это право вообще идея размещение смежных виджетов и отображение их обоих.

+0

Ваш код отличный! Благодаря !! Я вижу две кнопки, но они отображаются на левой стороне, в то время как они мне нужны в центре или снизу. Вы знаете, как это сделать? Кроме того, я искал документы kivy, но не смог найти правильный способ отображения текста при нажатии одной из этих кнопок. Заранее спасибо за вашу помощь. – user2922822

+0

Чтобы изменить свое положение, измените параметры макета. Правильный способ сделать это зависит от остальной части вашей программы, но ваша первоначальная идея использования pos_hint - это один из способов сделать это, если вы вернетесь к FloatLayout. – inclement

Смежные вопросы