如何在组合框的事件更改时关闭GTK对话?

时间:2016-03-05 09:02:54

标签: python dialog python-2.x gtk2

我正在使用PyGtk 2.0。在我的程序中,我创建了一个包含Combobox的对话框。 “对话框”没有“确定”或“取消”按钮。选择组合框中的项目时,对话框必须关闭(在onchange事件中表示)。但是如果没有手动关闭操作,我无法销毁Dialog。

我的相关代码是:

def mostrar_combobox(self, titulo, texto_etiqueta, lista):
    """
    MÃ © All to show a combobox on screen and get the option chosen
    """
    #print texto_etiqueta
    #dialogo = gtk.Dialog(titulo, None, 0, (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
    dialogo = gtk.Dialog(titulo, None, gtk.DIALOG_MODAL, None)
    etiqueta = gtk.Label(texto_etiqueta)
    etiqueta.show()
    dialogo.vbox.pack_start(etiqueta)
    combobox = gtk.combo_box_new_text()
    for x in lista:
        combobox.append_text(x)
    combobox.connect('changed', self.changed_cb)
    #combobox.set_active(0)
    combobox.show()
    dialogo.vbox.pack_start(combobox, False)
    response = dialogo.run()

    elemento_activo = combobox.get_active()

    return elemento_activo

    dialogo.hide()

def changed_cb(self, combobox):
    index = combobox.get_active()
    if index > -1:
        print index

请告知onchange之后如何关闭。

我在此处发布了示例代码:http://pastie.org/10748579

但是我无法在我的主应用程序中重现它。

1 个答案:

答案 0 :(得分:1)

这是一个做你想要的简单例子。我使用你的一些代码,一些我写了几年的代码,以及一些新东西来构建它。

#!/usr/bin/env python

''' Create a GTK Dialog containing a combobox that closes 
    when a combobox item is selected

    See http://stackoverflow.com/q/35812198/4014959

    Written by PM 2Ring 2016.03.05
'''

import pygtk
pygtk.require('2.0')
import gtk

lista = ('zero', 'one', 'two', 'three')

class Demo:
    def __init__(self):
        self.win = win = gtk.Window(gtk.WINDOW_TOPLEVEL)
        win.connect("destroy", lambda w: gtk.main_quit())

        button = gtk.Button("Open dialog")
        button.connect("clicked", self.dialog_button_cb)
        win.add(button)
        button.show()

        self.dialog = gtk.Dialog("Combo dialog", self.win,
            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
            (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT))

        combobox = gtk.combo_box_new_text()
        for s in lista:
            combobox.append_text(s)
        combobox.connect("changed", self.combo_cb)
        self.dialog.action_area.pack_end(combobox)
        combobox.show()

        win.show()

    def dialog_button_cb(self, widget):
        response = self.dialog.run()
        print "dialog response:", response
        self.dialog.hide()
        return True

    def combo_cb(self, combobox):
        index = combobox.get_active()
        if index > -1:
            print "combo", index, lista[index]
            self.dialog.response(gtk.RESPONSE_ACCEPT)
        return True

def main():
    Demo()
    gtk.main()


if __name__ == "__main__":
    main()

在Python 2.6.6,GTK 2.21.3版本上测试