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()

Приведенный выше код сгенерирует следующий вывод -