簡體   English   中英

Kivy Popup出現在函數運行之后而不是之前

[英]Kivy Popup Appearing after function is run instead of before

當應用程序在后台執行功能時,我想顯示一個彈出窗口或模式,上面寫着“處理時請耐心等待”的內容。 但是,在后台功能已經發生后會出現彈出窗口。 下面是產生此問題的代碼示例。

import os
import time

from kivy.app import App
from kivy.uix.modalview import ModalView
from kivy.uix.popup import Popup
from kivy.uix.button import Button, Label


class Poppy(Popup):
    def __init__(self, **kwargs):
        super(Poppy, self).__init__(**kwargs)
        self.content = Label(text='working')
        self.open()
        print("Working...")

class TApp(App):
    def build(self):
        return Button(text="Click to run", on_press=self.modal_test)

    def modal_test(self, event):
        p = Poppy(size_hint=(0.5, 0.5))
        self.printer()

    def printer(self):
        print('Popup works')
        time.sleep(5)

TApp().run()

您不應在同一個 GUI 線程上執行耗時的任務,因為它會阻止事件循環,導致 GUI 無法正確運行。 在這些情況下,您必須在新線程中運行它。

import threading
# ...
class TApp(App):
    def build(self):
        return Button(text="Click to run", on_press=self.modal_test)

    def modal_test(self, event):
        p = Poppy(size_hint=(0.5, 0.5))
        threading.Thread(target=self.printer, daemon=True).start()

    def printer(self):
        print('before: Popup works')
        time.sleep(5)
        print('after: Popup works')
# ...

還建議檢查在 Kivy 應用程序中使用 Python 線程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM