pythongtk:显示应用程序正在关闭的信息的对话框

2024-06-16 09:38:58 发布

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

我有个问题

关闭时我的应用程序必须从web应用程序注销。这需要一些时间。我想用“注销”信息通知用户

class Belt(gtk.Window):

def __init__(self):
    super(Belt, self).__init__()
    self.connect("destroy", self.destroy)

def destroy(self, widget, data=None):
    if self.isLogged:
        md = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, ico, gtk.BUTTONS_NONE, txt)
        md.showall()
        self.send('users/logout.json', {}, False, False)
    gtk.main_quit()

def main(self):
    if self.iniError is False:
        gtk.gdk.threads_init()
        gtk.gdk.threads_enter()
        gtk.main()
        gtk.gdk.threads_leave()


if __name__ == "__main__":
    app = Belt()
    app.main()

当我试图在destroy方法中显示对话框时,只有窗口出现,没有图标和文本。 我想,这个对话框没有确认按钮,只有信息,对话框必须与所有应用程序销毁。在

有什么想法吗?在

对不起,我的英语很差


Tags: selfnone信息false应用程序gtkifinit
1条回答
网友
1楼 · 发布于 2024-06-16 09:38:58

基本上,GTK必须有机会一直处理事件队列。如果另一个应用程序在处理期间没有响应,那么另一个应用程序将成为一个长时间的无响应队列。你可能不想在其他窗口中看到你想要的奇怪的东西。它甚至可能导致你的窗口系统灰色的窗口,并提出杀死可能冻结的应用程序。在

解决方案是确保正在处理事件队列。有两种主要方法可以做到这一点。如果耗时较长的部分包含许多增量步骤,则可以自己定期处理队列:

def this_takes_really_long():
    for _ in range(10000):
        do_some_more_work()
        while gtk.events_pending():
            gtk.main_iteration()

在一般情况下,您将不得不求助于某种异步处理。典型的方法是将阻塞部分放入自己的线程中,然后通过空闲回调向主线程(位于主循环中)发送信号。在您的代码中,可能如下所示:

^{pr2}$

相关问题 更多 >