PyGTK - класс диалога
Виджет Dialog обычно используется как всплывающее окно поверх родительского окна. Цель диалога - собрать некоторые данные от пользователя и отправить их в родительское окно. Диалог может быть модальным (где он блокирует родительский фрейм) или немодальным (диалоговый фрейм может быть пропущен).
Виджет Dialog библиотеки PyGTK представляет собой окно, разделенное по вертикали. В его верхней части находится gtk.VBox, в который упакованы виджеты Label или Entry. Нижняя секция называется action_area, в которой размещаются одна или несколько кнопок. Две области разделены gtk.HSeparator.
Класс gtk.Dialog имеет следующий конструктор -
dlg = gtk.Dialog (Title = None, parent = None, flags = 0, buttons = None)
Где,
Title - Появляется ли текст в строке заголовка виджета "Диалог".
Parent - Ссылка на окно верхнего уровня, из которого открывается диалоговое окно.
Flag- Определяет константы, управляющие работой диалога. Определенные константы -
gtk.DIALOG_MODAL | Если установлено, диалог захватывает все события клавиатуры. |
gtk.DIALOG_DESTROY_WITH_PARENT | Если установлено, диалоговое окно уничтожается вместе с его родителем. |
gtk.DIALOG_NO_SEPARATOR | Если установлено, над кнопками нет разделительной полосы. |
Что такое кнопка?
Button - это объект кортежа, содержащий пары gtk.Button с идентификатором акции (или текстом) и идентификаторами ответа.
ID ответа может быть любым числом или одной из предопределенных констант Response ID -
- gtk.RESPONSE_NONE
- gtk.RESPONSE_REJECT
- gtk.RESPONSE_ACCEPT
- gtk.RESPONSE_DELETE_EVENT
- gtk.RESPONSE_OK
- gtk.RESPONSE_CANCEL
- gtk.RESPONSE_CLOSE
- gtk.RESPONSE_YES
- gtk.RESPONSE_NO
- gtk.RESPONSE_APPLY
- gtk.RESPONSE_HELP
Важные методы класса gtk.Dialog приведены ниже -
add_button() - Добавляет кнопку с текстом, указанным button_text (или кнопка акции, если button_text - это идентификатор акции) в action_area.
response() - испускает "ответный" сигнал со значением, указанным в response_id
run() - Отображает диалог и возвращает response_id при запуске delete_event.
set_default_response() - Устанавливает последний виджет в области действий диалога с указанным response_id как виджет по умолчанию для диалога.
Виджет gtk.Dialog излучает следующие сигналы -
Закрыть | Это испускается, когда диалоговое окно закрывается. |
отклик | Это излучается, когда виджет action_area активирован (кнопка «нажата»), диалоговое окно получает событие delete_event или приложение вызывает метод response (). |
Две кнопки в action_area виджета Dialog используют идентификаторы акций gtk.STOCK.CANCEL и gtk.STOCK_OK. Они связаны с идентификаторами ответа gtk. RESPONSE_REJECT и gtk. RESPONSE_ACCEPT соответственно. Диалог закрывается при нажатии любой кнопки. Методы run () возвращают соответствующий идентификатор ответа, который можно использовать для дальнейшей обработки.
В следующем коде отображается gtk.Window верхнего уровня с кнопкой внутри. При нажатии кнопки появляется диалоговое окно с меткой и двумя кнопками.
пример
Обратите внимание на следующий код -
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Dialog Demo")
self.set_default_size(250, 200)
fixed = gtk.Fixed()
btn = gtk.Button("Show")
btn.connect("clicked",self.show_sialog)
fixed.put(btn,100,100)
self.add(fixed)
self.connect("destroy", gtk.main_quit)
self.show_all()
def show_sialog(self, widget, data=None):
dialog = gtk.Dialog("My dialog",
self,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
label = gtk.Label("Simple dialog")
dialog.vbox.add(label)
label.show()
res = dialog.run()
print res
dialog.destroy()
if __name__ == '__main__':
PyApp()
gtk.main()
Приведенный выше код дает следующий вывод -
Предварительно настроенные виджеты диалогов
PyGTK API имеет ряд предварительно настроенных виджетов Dialog -
- MessageDialog
- AboutDialog
- ColorSelectionDialog
- FontSelectionDialog
- FileChooserDialog
Чтобы продемонстрировать функционирование вышеуказанного стандартного диалогового окна в PyGTK, в gtk.Window следующей программы помещается меню с пунктом, каждый из которых вызывает диалог при щелчке. Перечислены функции обратного вызова, реагирующие на активацию сигнала каждого пункта меню. Вы также можете понять объяснение, предоставленное для каждого типа виджета диалога.
пример
Обратите внимание на следующий код -
import gtk, pango
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Dialog Boxes")
self.set_default_size(250, 200)
self.set_position(gtk.WIN_POS_CENTER)
mb = gtk.MenuBar()
menu1 = gtk.Menu()
file = gtk.MenuItem("_File")
file.set_submenu(menu1)
msg = gtk.MenuItem("MessageDialog")
menu1.append(msg)
abt = gtk.MenuItem("AboutDialog")
menu1.append(abt)
colo = gtk.MenuItem("colorDialog")
menu1.append(colo)
font = gtk.MenuItem("FontSelectionDialog")
menu1.append(font)
fl = gtk.MenuItem("FileChooserDialog")
menu1.append(fl)
mb.append(file)
vbox = gtk.VBox(False, 2)
vbox.pack_start(mb, False, False, 0)
self.add(vbox)
self.text = gtk.Label("TutorialsPoint")
vbox.pack_start(self.text, True, True, 0)
msg.connect("activate",self.on_msgdlg)
abt.connect("activate",self.on_abtdlg)
font.connect("activate",self.on_fntdlg)
colo.connect("activate",self.on_color)
fl.connect("activate", self.on_file)
self.connect("destroy", gtk.main_quit)
self.show_all()
def on_msgdlg(self, widget):
#MessageDialog usage code
def on_abtdlg(self, widget):
#AboutDialog usage code
def on_fntdlg(self,widget):
#FontSelectionDialog usage code
def on_color(self, widget):
#ColorChooserDialog usage cde
Def on_file(self, widget):
#FileChooserDialog usage code
if __name__ == '__main__':
PyApp()
gtk.main()
Приведенный выше код сгенерирует следующий вывод -