<Kivy> Почему мой код python не показывает кнопки? - PullRequest
0 голосов
/ 30 марта 2019

Смысл следующего кода - показать список кнопок (например, меню), которые вы бы использовали для смены экранов, сейчас ... Это не работает вообще, и я не могу видеть, где проблема

Я использовал, чтобы получить "typeerror init () принимает 1 позиционный аргумент, но 2 было дано", и я сделал его исчезающим, создав новый класс для экрана, тогда я получил экземпляр app.root не установлен и теперь я не получаю никаких ошибок

import kivy
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
import random
import main
kivy.require('1.10.1')

 class Game(BoxLayout):
    layout = BoxLayout(padding=5, orientation="vertical")
    colors = [(1, 0, 0, 1), (0, 1, 0, 1), (1, 0, 1, 1), (0, 0, 1, 1)]
    Buttonz= ('Button1', 'Button2', 'Button3', 'Button4')
    def Buttons(self):
        for i in range(len(self.Buttonz)):
            btn = Button(text=self.Buttonz[i],background_color=random.choice(self.colors))
            self.layout.add_widget(btn)
            btn.bind(on_press=main.Political)
        return self.layout


class Main(App):

    title='ButtonGame'
    def build(self):
       return Game()

if __name__ == '__main__':

   Main().run()

Я ожидал, что код покажет 4 кнопки со случайно выбранными цветами из 4, которые я объявил, но вместо этого он показывает полностью черный экран. Кнопки должны переключаться на другой экран из другого модуля. Возможно, мне следует использовать ScreenManager в обоих модулях ??? (Извините за ужасные отступы, я попытался отформатировать код, как это должно быть здесь, но я не смог)

1 Ответ

0 голосов
/ 30 марта 2019

Вам нужно добавить конструктор для вызова метода Buttons.

Фрагменты

class Game(BoxLayout):
    layout = BoxLayout(padding=5, orientation="vertical")
    colors = [(1, 0, 0, 1), (0, 1, 0, 1), (1, 0, 1, 1), (0, 0, 1, 1)]
    Buttonz = ('Button1', 'Button2', 'Button3', 'Button4')

    def __init__(self, **kwargs):
        super(Game, self).__init__(**kwargs)
        self.Buttons()
        self.add_widget(self.layout)

    def Buttons(self):
        for i in range(len(self.Buttonz)):
            btn = Button(text=self.Buttonz[i], background_color=random.choice(self.colors))
            self.layout.add_widget(btn)
            btn.bind(on_press=main.Political)

Пример

В следующем примере используется только один виджет BoxLayout в качествекорень.

main.py

import kivy
kivy.require('1.10.1')

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
import random
# import main


class Game(BoxLayout):
    colors = [(1, 0, 0, 1), (0, 1, 0, 1), (1, 0, 1, 1), (0, 0, 1, 1)]
    Buttonz = ('Button1', 'Button2', 'Button3', 'Button4')

    def __init__(self, **kwargs):
        super(Game, self).__init__(**kwargs)
        self.padding = 5
        self.orientation = "vertical"
        self.Buttons()

    def Buttons(self):
        for i in range(len(self.Buttonz)):
            btn = Button(text=self.Buttonz[i], background_color=random.choice(self.colors))
            self.add_widget(btn)
            # btn.bind(on_press=main.Political)


class Main(App):
    title = 'ButtonGame'

    def build(self):
        return Game()


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

Выход

Result

...