如何关闭组合框事件更改时的GTK对话?
问题描述:
我正在使用PyGtk 2.0。在我的程序中,我创建了一个包含Combobox的对话框。该对话框没有OK或Cancel按钮。当组合框中的项目被选中时,对话框必须关闭(意味着在onchange
事件中)。但是我不能在没有手动关闭操作的情况下销毁对话框。如何关闭组合框事件更改时的GTK对话?
我的相关代码:
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
但我主要的应用程序我无法重现相同。
答
下面是一个简单的例子,它可以做你想做的事。我使用你的一些代码,我写了几年的代码和一些新的东西来构建它。
#!/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
+0
亲爱的主席先生, 你的代码工作太棒了......非常感谢 Anes – Anes
ANES,我注意到,有5年多问题,你还没有接受任何答案。我希望你知道,作为提问者,你有选择权(和责任)来标记解决你的问题的答案。您可以通过点击每个答案左侧的刻度线来做到这一点,这样做会为您和提问者都赢得声誉。提升和接受答案是你可以感谢那些帮助你的人(提出好的答案,并接受解决你的问题的答案)的方式。 –