【问题标题】:Update a KivyMD button on the fly (Python)即时更新 KivyMD 按钮(Python)
【发布时间】:2020-08-22 16:43:10
【问题描述】:

我有一个 KivyMD 按钮,可以打开(初始化)YOLO。当 YOLO 初始化时,按钮变为绿色。这可行,但 YOLO 初始化大约需要 8 秒。所以我想在初始化过程中把按钮变成琥珀色,完成后变成绿色。麻烦的是,琥珀永远不会显示,因为程序被阻塞了。有什么想法可以重绘按钮以显示琥珀色,直到对 yolo_init() 的调用返回?谢谢!

def btn_yolo(self):
    if self.root.ids['_btn_yolo'].text_color == green: #we want to turn-off YOLO
        self.yolo.close_session()
        self.root.ids['_btn_yolo'].text_color = black #this shows
    else: #we want to initialize YOLO
        self.root.ids['_btn_yolo'].text_color = amber  #this never shows
        #update/refresh the button how?
        self.yolo = init_yolo(FLAGS) #this takes long
        self.root.ids['_btn_yolo'].text_color = green #this shows

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    您可以在另一个线程中执行您的init_yolo(),这样它就不会阻止颜色变为琥珀色。然后该线程可以调用Clock.schedule_once() 将颜色设置为绿色。这假定init_yolo() 不对GUI 进行任何更改(必须在主线程上完成)。此代码未经测试,因此可能存在一些错误,但它应该让您大致了解如何执行此操作。

    def btn_yolo(self):
        if self.root.ids['_btn_yolo'].text_color == green: #we want to turn-off YOLO
            self.yolo.close_session()
            self.root.ids['_btn_yolo'].text_color = black #this shows
        else: #we want to initialize YOLO
            self.root.ids['_btn_yolo'].text_color = amber  #this never shows
            #update/refresh the button how?
            threading.Thread(target=self.do_init, args=(FLAGS)).start()
    
    def do_init(self, FLAGS):
        self.yolo = init_yolo(FLAGS) #this takes long
        Clock.schedule_once(self.update_text_color)
    
    def update_text_color(self, dt):
        self.root.ids['_btn_yolo'].text_color = green #this shows
        
            
    

    【讨论】:

    • 是的,类似的方法会起作用,谢谢。我希望有一些更简单的东西,但不能拥有一切。 init_yolo 根本不影响 GUI,它只是初始化 YOLO 对象以供以后使用。给了三颗星,但没有显示,我是这里的菜鸟
    • 一直在寻找一种方法来做到这一点,@John Anderson,但对于像我这样的菜鸟似乎没有复选标记。对不起。
    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2018-08-24
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多