PythonKivy:如何使widgets Kivy文件加载后执行一个方法

2024-09-29 21:44:30 发布

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

我正在尝试使用Kivy建立一个交互式的学校时间表。我的逻辑是在Python和所有布局中编写的,而一般的estetic是在Kivy文件中编写的。我想在Kivy文件加载后立即运行一个特定的方法,以便它更改按钮的文本以显示

以下是启动后的情况: How it looks rn

以下是我希望我的应用程序启动后的外观:

How it should look

日期和课程的名称是波兰语

这是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]

        .............

以下是Kivy代码:

<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模块的内容,但我不知道如何正确使用它


Tags: nameselfidinitondefloadpickle

热门问题