python - Python Kivy:如何在小部件 Kivy 文件加载后执行方法
问题描述
我正在尝试使用 Kivy 构建交互式学校时间表。我的逻辑是在 Python 和所有布局中编写的,一般的 estetic 是在 Kivy 文件中编写的。我想在 Kivy 文件加载后立即运行特定方法,以便更改要显示的按钮的文本。
以下是我希望我的应用在启动后的样子:
日子和课程的名称是波兰语。
这是planchart.py的代码
class Okienko(Button):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.lessons = []
f = open("/interaktywny_plan/classes.dat", "rb")
pon = pickle.load(f)
wto = pickle.load(f)
sro = pickle.load(f)
czw = pickle.load(f)
pt = pickle.load(f)
f.close()
self.lessons.append(pon)
self.lessons.append(wto)
self.lessons.append(sro)
self.lessons.append(czw)
self.lessons.append(pt)
self.lesson = ""
self.sub_press = ""
def on_release(self):
self.text = self.lesson
def on_press(self):
self.text = self.sub_press
def update_button(self):
if self.name_ == "one_pon":
self.lesson = self.lessons[0][0][0]
self.sub_press = self.lessons[0][0][1] + "\n" + self.lessons[0][0][2]
elif self.name_ == "two_pon":
self.lesson = self.lessons[0][1][0]
self.sub_press = self.lessons[0][1][1] + "\n" + self.lessons[0][1][2]
elif self.name_ == "three_pon":
self.lesson = self.lessons[0][2][0]
self.sub_press = self.lessons[0][2][1] + "\n" + self.lessons[0][2][2]
elif self.name_ == "four_pon":
self.lesson = self.lessons[0][3][0]
self.sub_press = self.lessons[0][3][1] + "\n" + self.lessons[0][3][2]
.............
这是基维代码:
<Okienko>:
background_color: [.5, .9, 1, 1]
halign: "center"
size_hint: None, None
font_size: 24
size: 96, 96
on_press: self.on_press()
on_release: self.on_release()
<PlanChart>:
cols: 11
padding: 2
Dzien:
id: pon
text: "Pon"
Okienko:
id: one_pon
name_: "one_pon"
Okienko:
id: two_pon
name_: "two_pon"
Okienko:
id: three_pon
name_: "three_pon"
Okienko:
id: four_pon
name_: "four_pon"
Okienko:
id: five_pon
name_: "five_pon"
..............
我尝试使用@mainthread
并放入self.update_button()
,__init__
但它仍然会开始为空。我试着把它放进去self.update_button()
,__init__
但我会得到AtributeError
因为 Kivy 文件没有加载。之后,我阅读了有关Clock
模块的信息,但我不知道如何正确使用它。
解决方案
您可以使用该模块在 Kivy 文件加载后Clock
安排方法调用:
from kivy.clock import Clock
Clock.schedule_once(self.update_button, .1)
推荐阅读
- python - 获取和格式化今天和昨天的日期
- ios - iOS 13 动画视图不改变帧
- java - 给出空指针异常
- flutter - Flutter- TextEditingController 侦听器被多次调用文本字段
- azure - Azure 功能:Powershell 命令 New-AzureRmVM 永远不会返回
- ios - -headerpad_max_install_names 与 -bitcode_bundle 一起使用时被忽略
- c# - 根据所选选项生成列表
- javascript - 调用 daterangepicker onclick
- javascript - 无法承诺基于回调的函数
- python - 根据多个值过滤字典列表