如何在主事件循环中阅读和编辑按钮

时间:2019-07-08 19:02:16

标签: python button kivy

我有一个按钮网格,需要一种方法来读取特定按钮的属性并在主事件循环中编辑另一个按钮的属性。

我已经找到了多种编辑属性的方法,我可以在启动时或通过手动写出全部具有特定名称的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秒钟左右将其中一个按钮背景颜色设为红色,如果按钮为红色并单击,则您会松动。因此是“读取”和“编辑”按钮。

p.s。是否有on_first或on_action之类的东西,只是为了使日程表只能在按下按钮后才开始,而不是在启动时才开始,所以那太好了。谢谢:)

1 个答案:

答案 0 :(得分:0)

如果要将按钮属性从.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)相同