Простой, универсальный и повторно используемый диалог ввода (иногда называемый диалогом ввода) в PyGTK

Я ищу простой диалог с виджетами ввода текста, запрашивающий у пользователя ввод данных. Диалог должен быть легко запущен (например, варианты gtk.MessageDialog ) и гибким.

Конечно, есть некоторые примеры, но они либо не являются достаточно гибкими, либо слишком сложными для моего вкуса.

Я ненавижу повторное изобретательство колеса … или диалог.

3 Solutions collect form web for “Простой, универсальный и повторно используемый диалог ввода (иногда называемый диалогом ввода) в PyGTK”

Основываясь на примере, который я нашел (спасибо Ардорис !), Я придумал подкласс диалога … надеюсь, что это поможет кому-то!

 #!/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> или нажимает Ok. Если нажата <Esc> Cancel или <Esc> , метод run() возвращает None .

Кроме этого, диалог должен вести себя как любой другой экземпляр gtk.MessageDialog .

Возможно, это не очень общее, так как предполагает, что у вас всегда будет Ok как вариант, но это то, что мне нужно в 99% моих случаев использования в любом случае.

В GTK + нет ни одного. У вас есть два варианта:

  • Создайте диалоговое окно, упакуйте запись и любой другой контент, который вам нужен (возможно, лучший способ, на мой взгляд)
  • Извлеките content_area MessageDialog и добавьте в него запись.

Что-то вроде:

 #!/usr/bin/env python import gtk messagedialog = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_QUESTION, buttons=gtk.BUTTONS_OK, message_format="Hello") action_area = messagedialog.get_content_area() entry = gtk.Entry() action_area.pack_start(entry) messagedialog.show_all() messagedialog.run() messagedialog.destroy() 

Хотя это, вероятно, нуждается в большей утонченности, чтобы получить запись, чтобы она выглядела красиво.

Вот функция, которую я написал, основываясь на предыдущих ответах здесь. Это функция вместо класса, что означает, что вы можете использовать ее в одной строке.

 def get_text(parent, message, default=''): """ Display a dialog with a text entry. Returns the text, or None if canceled. """ d = gtk.MessageDialog(parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, message) entry = gtk.Entry() entry.set_text(default) entry.show() d.vbox.pack_end(entry) entry.connect('activate', lambda _: d.response(gtk.RESPONSE_OK)) d.set_default_response(gtk.RESPONSE_OK) r = d.run() text = entry.get_text().decode('utf8') d.destroy() if r == gtk.RESPONSE_OK: return text else: return None по def get_text(parent, message, default=''): """ Display a dialog with a text entry. Returns the text, or None if canceled. """ d = gtk.MessageDialog(parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, message) entry = gtk.Entry() entry.set_text(default) entry.show() d.vbox.pack_end(entry) entry.connect('activate', lambda _: d.response(gtk.RESPONSE_OK)) d.set_default_response(gtk.RESPONSE_OK) r = d.run() text = entry.get_text().decode('utf8') d.destroy() if r == gtk.RESPONSE_OK: return text else: return None 
  • Как установить poppler в ubuntu 15.04?
  • Включить библиотеку в приложение python
  • Gtk.StatusIcon PopupMenu в python
  • Проверьте, находится ли окно на текущем рабочем столе?
  • Виджет ввода PyGTK в заголовке TreeViewColumn
  • Как определить время простоя дисплея с Python в Windows, Linux и MacOS?
  • Как мне разработать и создать автономный пакет приложений PyGTK для MacOS с видными виджетами?
  • pygtk: Нарисуйте линии на gtk.gdk.Pixbuf
  • Python - лучший язык программирования в мире.