【问题标题】:Pop up Kivy displaying while a process is running in background进程在后台运行时弹出 Kivy 显示
【发布时间】:2019-07-22 06:37:25
【问题描述】:

在我的 kivy 项目中,我有一个按钮,可让我生成 .png 格式的 matplotlib 图。生成此图像需要时间(大约 20 秒),我想显示一个弹出窗口来警告用户。

我尝试了什么:

<MyPopup@Popup>:
    auto_dismiss: False
    Button:
        text: 'This could take time, please wait :)  '
        on_release: root.dismiss()

和:

ActionButton:
                        text: 'generate graph'
                        on_release: Factory.MyPopup().open()
                        #on_release: root.generate_graph() 

不幸的是,如果我取消注释第二个“on_release”,pop_up 窗口永远不会出现?

你有什么猜测吗?

提前感谢您!

【问题讨论】:

  • 请提供 ActionButton 类的最少代码。

标签: python popup kivy


【解决方案1】:

要在方法运行时显示弹出窗口,我使用线程。当弹出窗口启动时,该方法在线程中运行。

代码:

def popupThread(self):          
    
    #set the popup structure
    self.popup = ActivityBox(self)
    self.popup.open()
    
    # run the method in threads
    t1 = threading.Thread(target = self.someMethod)
    t1.start()

弹出窗口定义在Builder.load_string():

def build(self):
        sm = Builder.load_string("""    
<ActivityBox>:
    size_hint: 1, .7
    auto_dismiss: False
    title: 'some activity' 
    title_align: "center"
    title_size: 30
    BoxLayout:
        orientation: "vertical"
        Label:
            font_size: '30sp'
            text: 'work in progress'
        BoxLayout:
            orientation: "horizontal"
            spacing: 10
            size_hint: 1, .5
""")

【讨论】:

    【解决方案2】:

    您正在覆盖 on_release 方法。

    ActionButton:
        text: 'generate graph'
        on_release: 
            Factory.MyPopup().open()
            root.generate_graph() 
    

    【讨论】:

    • 感谢您的评论,不幸的是,我刚刚尝试了您的解决方案,但仍然无法正常工作...但是,如果我评论“root.generate_graph()”,弹出窗口将正常显示
    • 可能是 generate_graph() 阻止了 GUI。也许你可以使用不同的thread(或process)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 2023-04-06
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多