python - 如何在kivy中刺激按钮?
问题描述
如何使press
此代码上的方法起作用?当我按下一个按钮时,列表会填充,但是当我从那时起调用它时Clock
不会。我可以populate
在控制台上看到打印,但列表没有出现在视图中。我的意思很简单:如何在代码中刺激按下按钮?
from kivy.config import Config
Config.set('graphics', 'multisamples', '0')
from random import sample
from string import ascii_lowercase
import pyrebase
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
kv = """
<Row@BoxLayout>:
canvas.before:
Color:
rgba: 0.5, 0.5, 0.5, 1
Rectangle:
size: self.size
pos: self.pos
value: ''
Label:
text: root.value
<Test>:
canvas:
Color:
rgba: 0.3, 0.3, 0.3, 1
Rectangle:
size: self.size
pos: self.pos
rv: rv
orientation: 'vertical'
GridLayout:
cols: 3
rows: 2
size_hint_y: None
height: dp(108)
padding: dp(8)
spacing: dp(16)
Button:
id: populate_btn
text: 'Populate list'
on_press: root.populate()
RecycleView:
id: rv
scroll_type: ['bars', 'content']
scroll_wheel_distance: dp(114)
bar_width: dp(10)
viewclass: 'Row'
RecycleBoxLayout:
default_size: None, dp(56)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
spacing: dp(2)
"""
Builder.load_string(kv)
class Test(BoxLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
def populate(self):
print("populate")
self.rv.data = [{'value': ''.join(sample(ascii_lowercase, 6))}
for x in range(50)]
def press(self):
self.ids.populate_btn.dispatch('on_press')
def interval(dt):
x = Test()
x.press()
Clock.schedule_interval(interval, 3)
class TestApp(App):
def build(self):
return Test()
if __name__ == '__main__':
TestApp().run()
解决方案
该错误是由于Test
在函数中创建的对象与返回方法的对象interval
不同,此外在间隔中创建的Test对象由于它是局部变量而被消除。所以解决方案是通过将它传递给间隔函数来使用相同的引用,我将使用函数。Test
build
functools.partial()
# ...
from functools import partial
# ...
def interval(x, dt):
x.press()
class TestApp(App):
def build(self):
t = Test()
Clock.schedule_interval(partial(interval, t), 3)
return t
# ...
推荐阅读
- flutter - 当 TextField 获得焦点时触发 Flutter TextEditingController 侦听器
- javascript - SyntaxError:位置 1 处 JSON 中的意外标记 e || 400 错误请求
- python-3.x - 按一列过滤 Pandas 数据框并获取另一列中的值的总和
- if-statement - IF-THEN 和 LAG(函数)语句的问题 - 未正确分类
- java - 为什么更改我的代码中的一行会导致堆栈溢出?
- python - 如何在更新函数代码后第二次从另一个脚本导入函数
- xcode - NSComboBox 使用 NSValueTransformer 自动完成
- python - Python 3.X:如何调用类的函数来检查输入字符串的特征?
- python - 将深度嵌套的字典转换为熊猫数据框?
- android - 如何保持我的 Android VideoView 的纵横比仅与其高度成比例?