首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :如何在小部件Kivy文件加载之后执行一个方法

Python :如何在小部件Kivy文件加载之后执行一个方法
EN

Stack Overflow用户
提问于 2020-04-06 09:43:09
回答 1查看 408关注 0票数 0

我试着用Kivy建立一个互动的学校时间表。我的逻辑是在Python中编写的,所有布局和一般的关注点都是用Kivy文件编写的。我希望在Kivy文件加载之后立即运行一个特定的方法,这样它就可以将按钮的文本更改为显示。

下面是我启动它之后的处理方式:

下面是我希望我的应用程序在启动后的样子:

日子和课程的名称用波兰文写着。

这是planchart.py的代码

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
<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模块的文章,但是我不知道如何正确地使用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-06 10:30:05

您可以在加载Kivy文件之后使用Clock模块来调度方法调用:

代码语言:javascript
复制
from kivy.clock import Clock
Clock.schedule_once(self.update_button, .1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61056928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档