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 秒左右将其中一个按钮的背景颜色变为红色,如果按钮是红色并点击了,那么你就松了。因此读取和编辑按钮。
ps 是否有 on_first 或 on_action 之类的,所以只有在按下按钮后才能启动计划,而不是在启动时启动,那会很棒。谢谢 :)
解决方案
如果你想从一个.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)
推荐阅读
- android - 链接可观察对象 RxJava
- python - 如何在python中逐行写入csv文件?
- r - 如何使用更改重复次数的 For、While、Repeat 函数
- eloquent - 数据透视表集合在同步后不更新
- ruby-on-rails - 如何在不再次调用 .save 的情况下将子记录的 id 保存在父项中?
- php - sabre:循环通过 TEL-property 不能提供预期的结果
- r - 无法使用文本数据创建 R 数据框来填充不同的列
- regex - Python 无法处理请求的 POST 响应
- java - 我该如何更改它以用 html 页面替换 404 页面错误?
- angular - 如何在 Angular 8 应用程序中支持 Internet Explorer?