На основании примера , который я нашел (спасибо Ardoris !), Я придумал подкласс диалога ... надеюсь, он кому-нибудь поможет!
#!/usr/bin/env python
import gtk
class EntryDialog(gtk.MessageDialog):
def __init__(self, *args, **kwargs):
'''
Creates a new EntryDialog. Takes all the arguments of the usual
MessageDialog constructor plus one optional named argument
"default_value" to specify the initial contents of the entry.
'''
if 'default_value' in kwargs:
default_value = kwargs['default_value']
del kwargs['default_value']
else:
default_value = ''
super(EntryDialog, self).__init__(*args, **kwargs)
entry = gtk.Entry()
entry.set_text(str(default_value))
entry.connect("activate",
lambda ent, dlg, resp: dlg.response(resp),
self, gtk.RESPONSE_OK)
self.vbox.pack_end(entry, True, True, 0)
self.vbox.show_all()
self.entry = entry
def set_value(self, text):
self.entry.set_text(text)
def run(self):
result = super(EntryDialog, self).run()
if result == gtk.RESPONSE_OK:
text = self.entry.get_text()
else:
text = None
return text
Метод run()
возвращает либо текст, введенный в поле ввода, если пользователь нажимает <Enter>
или нажимает кнопку ОК.Если нажата Cancel
или нажата <Esc>
, метод run()
возвращает None
.
За исключением этого, диалоговое окно должно вести себя как любой другой gtk.MessageDialog
экземпляр.
Возможно, это не очень общее, поскольку предполагается, что вы всегда будете иметь Ok каквариант, но это то, что мне нужно в 99% случаев использования в любом случае.