首页 > 解决方案 > 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模块的信息,但我不知道如何正确使用它。

标签: pythonuser-interfacekivykivy-language

解决方案


您可以使用该模块在 Kivy 文件加载Clock安排方法调用:

from kivy.clock import Clock
Clock.schedule_once(self.update_button, .1)

推荐阅读