PyGTK - Kelas Dialog

Widget Dialog biasanya digunakan sebagai jendela pop-up di atas jendela induk. Tujuan Dialog adalah mengumpulkan beberapa data dari pengguna dan mengirimkannya ke jendela induk. Dialog dapat berupa modal (di mana ia memblokir frame induk) atau modeless (bingkai dialog dapat dilewati).

Widget Dialog pustaka PyGTK adalah jendela yang dibelah secara vertikal. Di bagian atasnya, ada gtk.VBox tempat Label atau Widget Entri dikemas. Bagian bawah disebut action_area di mana satu atau lebih tombol ditempatkan. Dua area dipisahkan oleh gtk.HSeparator.

gtk. Kelas dialog memiliki konstruktor berikut -

dlg = gtk.Dialog (Title = None, parent = None, flags = 0, buttons = None)

Dimana,

  • Title - Apakah teks muncul di bilah Judul widget Dialog.

  • Parent - Adalah referensi ke jendela tingkat atas tempat dialog muncul.

  • Flag- Mendefinisikan konstanta yang mengontrol operasi Dialog. Konstanta yang ditentukan adalah -

gtk.DIALOG_MODAL Jika disetel, dialog mengambil semua acara keyboard
gtk.DIALOG_DESTROY_WITH_PARENT Jika disetel, dialog dimusnahkan jika induknya adalah.
gtk.DIALOG_NO_SEPARATOR Jika disetel, tidak ada bilah pemisah di atas tombol.

Apa itu Tombol?

Tombol adalah objek tupel yang berisi pasangan gtk. Tombol dengan ID stok (atau teks) dan ID responsnya.

ID respons bisa berupa angka apa pun atau salah satu konstanta ID Respons yang telah ditentukan sebelumnya -

  • 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

Metode penting dari kelas gtk.Dialog diberikan di bawah ini -

  • add_button() - Menambahkan tombol dengan teks yang ditentukan oleh button_text (atau tombol stok, jika button_text adalah ID saham) di action_area.

  • response() - Memancarkan sinyal "respons" dengan nilai yang ditentukan dalam response_id

  • run() - Menampilkan dialog dan mengembalikan response_id saat delete_event dipancarkan.

  • set_default_response() - Menyetel widget terakhir di area aksi dialog dengan yang ditentukan response_id sebagai widget default untuk dialog.

gtk.Dialog widget memancarkan sinyal berikut -

Menutup Ini dibunyikan saat dialog ditutup.
Tanggapan Ini dipancarkan saat widget action_area diaktifkan (tombol "diklik"), dialog menerima delete_event atau aplikasi memanggil metode response ().

Dua tombol di action_area widget Dialog menggunakan ID Saham gtk.STOCK.CANCEL dan gtk.STOCK_OK. Mereka terkait dengan ID respons gtk. RESPONSE_REJECT dan gtk. RESPONSE_ACCEPT masing-masing. Dialog ditutup jika ada tombol yang ditekan. Metode run () mengembalikan ID respons yang sesuai yang dapat digunakan untuk pemrosesan lebih lanjut.

Kode berikut menampilkan gtk. Jendela tingkat atas dengan Tombol di dalamnya. Saat tombol diklik, Dialog muncul dengan label dan dua tombol.

Contoh

Perhatikan kode berikut -

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

Kode di atas menghasilkan keluaran sebagai berikut -

Widget Dialog yang Telah Dikonfigurasi

PyGTK API memiliki sejumlah widget Dialog yang telah dikonfigurasi sebelumnya -

  • MessageDialog
  • AboutDialog
  • ColorSelectionDialog
  • FontSelectionDialog
  • FileChooserDialog

Untuk mendemonstrasikan fungsi dialog standar di atas di PyGTK, menu dengan item menu yang masing-masing memanggil dialog saat diklik, dimasukkan ke dalam gtk.Window di program berikut. Fungsi panggilan balik yang merespon untuk mengaktifkan sinyal dari setiap item menu terdaftar. Anda juga dapat memahami penjelasan yang diberikan untuk setiap jenis widget dialog.

Contoh

Perhatikan kode berikut -

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

Kode di atas akan menghasilkan output berikut -