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 -