макеты Kivy не правильно отображать кнопки

голоса
0

Я пытаюсь сделать клавиатуру рода вещи в kivy, путем размещения 9 кнопок в 3х3 GridLayout. Тем не менее, после выполнения кода, он показывает только 1 кнопку в правом нижнем углу.

Мой код:

from kivy.uix.button import Button
from kivy.uix.boxlayout import GridLayout
from kivy.app import App

class root(GridLayout):
    def __init__(self, **kwargs):
        super(GridLayout, self).__init__(**kwargs)
        self.cols = 2
        self.rows = 2
        self.button1 = Button(text = '1')
        self.button2 = Button(text = '2')
        self.button3 = Button(text = '3')
        self.button4 = Button(text = '4')
        self.button5 = Button(text = '5')
        self.button6 = Button(text = '6')
        ...........
        self.add_widget(self.button1)
        self.add_widget(self.button2)
        self.add_widget(self.button3)
        self.add_widget(self.button4)
        ...........


class myApp(App):
    def build(self):
        l = root()
        return l

myApp().run()

Любая помощь?

Задан 02/09/2018 в 05:06
источник пользователем
На других языках...                            


1 ответов

голоса
0

У вас есть следующие ошибки:

  • Для импорта GridLayoutнеобходимо использоватьfrom kivy.uix.gridlayout import GridLayout
  • При использовании super()вы должны передать в качестве первого параметра имя класса, то есть super(root, self).__init__(**kwargs).
  • Вы говорите , что вы хотите , 3 строки и 3 столбца, так что вы должны использовать self.cols = 3, self.rows = 3.

Код:

from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.app import App

class root(GridLayout):
    def __init__(self, **kwargs):
        super(root, self).__init__(**kwargs)
        self.cols = 3
        self.rows = 3
        self.button1 = Button(text = '1')
        self.button2 = Button(text = '2')
        self.button3 = Button(text = '3')
        self.button4 = Button(text = '4')
        self.button5 = Button(text = '5')
        self.button6 = Button(text = '6')
        ...........
        self.add_widget(self.button1)
        self.add_widget(self.button2)
        self.add_widget(self.button3)
        self.add_widget(self.button4)
        ...........


class myApp(App):
    def build(self):
        l = root()
        return l

myApp().run()

Более простое и более элегантное решение состоит в использовании для цикла:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button


class Root(GridLayout):
    def __init__(self, **kwargs):
        super(Root, self).__init__(**kwargs, rows=3, cols=3)

        for i in range(1, 10):
            btn = Button(text=str(i))
            self.add_widget(btn)


class myApp(App):
    def build(self):
        l = Root()
        return l


if __name__ == '__main__':
    myApp().run()
Ответил 02/09/2018 в 05:35
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more