如何读取和编辑主事件循环中的按钮

2024-07-03 05:48:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我已经找到了许多不同的方法来编辑属性,我可以在启动时或手动写出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秒钟左右把一个按钮的背景颜色变成红色,如果按钮是红色的,然后点击,你就会松开。因此出现了“读取”和“编辑”按钮

另外,是否有一个on_first或on_action或其他什么东西,这样日程安排只能在按下按钮后启动,而不是启动时启动,这将是非常好的。谢谢:)


Tags: fromimportselfconfig编辑if属性on
1条回答
网友
1楼 · 发布于 2024-07-03 05:48:34

如果要将按钮属性从.kv文件读取到.py文件,则需要使用ObjectProperty

in.kv文件

id: btns
group: 'Field'
.
.
.

在.py文件中

from kivy.properties import ObjectProperty

当你写这个的时候

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

您需要从kv文件中读取btn。为此,

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

请注意,变量名btns应与id (kv file)中的相同

相关问题 更多 >