PyGTK - Kelas DrawingArea

Widget DrawingArea menampilkan kanvas kosong yang berisi gtk.gdk. Jendela tempat objek seperti garis, persegi panjang, busur, dll dapat digambar.

PyGTK menggunakan perpustakaan Kairo untuk operasi penggambaran tersebut. Kairo adalah perpustakaan grafis vektor 2D yang populer. Ia ditulis dalam C., meskipun, ia memiliki binding di sebagian besar Bahasa seperti C ++, Java, Python, PHP, dll. Library Cairo dapat digunakan untuk menggambar pada perangkat keluaran standar di berbagai sistem operasi. Ini juga dapat digunakan untuk membuat file PDF, SVG, dan pasca-skrip.

Untuk melakukan operasi penggambaran yang berbeda, kita harus mengambil perangkat pada teks dari objek keluaran target. Dalam kasus ini, karena gambar muncul di widget gtk.DrawingArea, konteks perangkat gdk.Window yang ada di dalamnya diperoleh. Kelas ini memilikicairo-create() metode yang mengembalikan konteks perangkat.

area = gtk.DrawingArea()
dc = area.window.cairo_create()

Widget DrawingArea dapat dihubungkan ke callback berdasarkan sinyal berikut yang dipancarkan olehnya -

Menyadari Untuk mengambil tindakan yang diperlukan saat widget dibuat di tampilan tertentu.
configure_event Untuk mengambil tindakan yang diperlukan saat widget berubah ukuran.
expose_event Untuk menangani penggambaran ulang konten widget saat area gambar pertama kali muncul di layar, atau saat tertutup oleh jendela lain dan kemudian terbuka (terbuka).

Peristiwa Mouse dan Keyboard juga dapat digunakan untuk meminta panggilan balik oleh add_events() method dari gtk.Widget class.

Yang menarik adalah sinyal peristiwa eksposur yang dipancarkan saat kanvas DrawingArea pertama kali muncul. Berbagai metode untuk menggambar objek 2D, yang ditentukan di pustaka Kairo dipanggil dari panggilan balik ini yang terhubung ke sinyal peristiwa pemaparan. Metode ini menggambar objek yang sesuai pada konteks perangkat Kairo.

Berikut ini adalah metode menggambar yang tersedia -

  • dc. rectangle (x, y, w, h) - Ini menggambar sebuah persegi panjang pada koordinat kiri atas yang ditentukan dan memiliki lebar dan tinggi yang diberikan.

  • dc.arc (x, y, r, a1, a2) - Ini menggambar busur lingkaran dengan jari-jari dan dua sudut tertentu.

  • dc.line (x1, y1, x2, y2) - Ini menarik garis antara dua pasang koordinat.

  • dc.line_to (x, y) - Ini menarik garis dari posisi saat ini ke (x, y)

  • dc.show_text (str) - menggambar string pada posisi kursor saat ini

  • dc.stroke () - menggambar garis

  • dc.fill () - mengisi bentuk dengan warna saat ini

  • dc.set_color_rgb (r, g, b) - mengatur warna untuk garis besar dan mengisi dengan nilai r, g dan b antara 0,0 hingga 1,0

Contoh

Skrip berikut menggambar berbagai bentuk dan menguji menggunakan metode Kairo.

import gtk
import math

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("Basic shapes using Cairo")
      self.set_size_request(400, 250)
      self.set_position(gtk.WIN_POS_CENTER)
      
	  self.connect("destroy", gtk.main_quit)
		
      darea = gtk.DrawingArea()
      darea.connect("expose-event", self.expose)
		
      self.add(darea)
      self.show_all()
		
      def expose(self, widget, event):
      cr = widget.window.cairo_create()
		
      cr.set_line_width(2)
      cr.set_source_rgb(0,0,1)
      cr.rectangle(10,10,100,100)
      cr.stroke()
		
      cr.set_source_rgb(1,0,0)
      cr.rectangle(10,125,100,100)
      cr.stroke()
		
      cr.set_source_rgb(0,1,0)
      cr.rectangle(125,10,100,100)
      cr.fill()
		
      cr.set_source_rgb(0.5,0.6,0.7)
      cr.rectangle(125,125,100,100)
      cr.fill()
		
      cr.arc(300, 50, 50,0, 2*math.pi)
      cr.set_source_rgb(0.2,0.2,0.2)
      cr.fill()
		
      cr.arc(300, 200, 50, math.pi,0)
      cr.set_source_rgb(0.1,0.1,0.1)
      cr.stroke()
		
      cr.move_to(50,240)
      cr.show_text("Hello PyGTK")
      cr.move_to(150,240)
      cr.line_to(400,240)
      cr.stroke()

PyApp()
gtk.main()

Skrip di atas akan menghasilkan output berikut -