pygtk运行两个窗口,弹出窗口和主要

dra*_*on7 5 python pygtk window popup progress-bar

我在python中创建脚本,它与bash合作.当我设置所有搜索选项并按下查找按钮时,我想显示弹出窗口progress bar,当搜索完成时它会消失.我打开popup window,popup.show()直到我关闭弹出窗口才执行任何功能.那么如何解决这个问题呢?

在控制器类中:

def search(self, widget):
    cmd = "find " + self.model.directory + " -name \"" + self.model.name + "\"" + " -perm -" + str(self.model.mode)
    if self.model.type is not None and self.model.type != '':
        cmd += " -type " + self.model.type
    if self.model.owner is not None:
        cmd += " -user " + self.model.owner
    if self.model.days is not None:
        cmd += " -mtime -" + str(self.model.days)

    self.progress = SearcherProgressBar()

    output = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
    out = output.stdout.read().strip()
    array = string.split(out, '\n')
    self.list = list()
    self.progress.label = "sdsds"
    for value in array:
        self.add_to_list(value)

    #self.progress.popup.destroy() # when I uncomment, popup never appears

    self.view.treestore.clear()
    self.add_to_tree(self.list, None)
    self.view.expand_item.set_sensitive(True)
Run Code Online (Sandbox Code Playgroud)

在进度栏类中:

class SearcherProgressBar:

def __init__(self):
    self.popup = gtk.Window(gtk.WINDOW_POPUP)
    vbox = gtk.VBox()
    self.popup.add(vbox)
    self.popup.set_size_request(500,100)
    self.label = gtk.Label("Searching...")
    vbox.pack_start(self.label, True, True, 0)
    self.popup.connect("destroy", self.dest)
    self.popup.show_all()


def dest(self, widget, data=None):
    self.popup.destroy()
    return False
Run Code Online (Sandbox Code Playgroud)

dra*_*on7 1

[已解决] 应在每个小部件更新后添加此代码

while gtk.events_pending():
        gtk.main_iteration()
Run Code Online (Sandbox Code Playgroud)