Как читать и редактировать кнопки в главном цикле событий - PullRequest
0 голосов
/ 08 июля 2019

У меня есть сетка кнопок, и мне нужен способ прочитать свойства определенной кнопки и редактировать свойства другой в основном цикле событий.

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

import kivy
from kivy.app import App
from kivy.config import Config
from kivy.uix.gridlayout import GridLayout
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.widget import Widget
from kivy.clock import Clock
kivy.require("1.11.1")

#Force window size
Config.set('graphics','width','150')
Config.set('graphics','height','200')

class ButtonField(GridLayout):
    def __init__(self, **kwargs):
        super(ButtonField, self).__init__()
        self.cols = 3
        self.rows = 4
        for count in list(range(self.cols*self.rows)):
            self.btn = ToggleButton(id=str(count))
            self.add_widget(self.btn)


class Ditto(App):
    def build(self):
        return ButtonField()

    def on_start(self):
        Clock.schedule_interval(self.update, 1)

    def update(self, *args):
        print("test")


if __name__ == "__main__":
    Ditto().run()

вот файл .kv.

<ToggleButton>

    id: btns
    group: 'Field'
    font_size: 40
    background_color: 1,1,1,1
    disabled_color: 1, 0.64, 0, 1
    background_normal: ''
    background_disabled_down: ''
    text: '' if btns.state == 'normal' else 'O'
    disabled: False if btns.state == 'normal' else True
    canvas:
        Color:
            rgba: .5, .5, .5, 1
        Line:
            width: 2
            rectangle: self.x, self.y, self.width, self.height

Я хотел менять цвет фона одной из кнопок каждые 3 секунды или около того, и если кнопка была красной и нажата, то вы проигрываете.следовательно, кнопки чтения и редактирования.

ps - это on_first или on_action или что-то в этом роде, просто расписание может запускаться только после нажатия кнопки, а не при запуске, что было бы замечательно.Спасибо:)

1 Ответ

0 голосов
/ 08 июля 2019

если вы хотите прочитать свойство кнопки из файла .kv в файл .py, то вам нужно будет использовать ObjectProperty

в файле .kv

id: btns
group: 'Field'
.
.
.

в .py файле

from kivy.properties import ObjectProperty

когда вы пишете это

self.btn = ToggleButton(id=str(count))

, вам нужно прочитать btn из файла kv.Для этого

btns=ObjectProperty(None)
self.btns = ToggleButton(id=str(count))

Обратите внимание, что имя переменной btns должно быть таким же, как в id (kv file)

...