PyGTK - DrawingArea Sınıfı

DrawingArea widget'ı, üzerine çizgi, dikdörtgen, yay vb. Nesnelerin çizilebileceği gtk.gdk.Window içeren boş bir tuval sunar.

PyGTK, bu tür çizim işlemleri için Kahire kitaplığını kullanır. Kahire, popüler bir 2D vektör grafik kütüphanesidir. C ile yazılmıştır, ancak çoğu Dilde C ++, Java, Python, PHP vb. Gibi bağlantıları vardır. Kahire kitaplığı çeşitli işletim sistemlerinde standart çıktı aygıtları üzerinde çizim yapmak için kullanılabilir. Ayrıca PDF, SVG ve komut dosyası sonrası dosyaları oluşturmak için de kullanılabilir.

Farklı çizim işlemlerini gerçekleştirmek için cihazı hedef çıktı nesnesinin metnine getirmeliyiz. Bu durumda, çizim gtk.DrawingArea widget'ında göründüğünden, içindeki gdk.Window'un cihaz bağlamı elde edilir. Bu sınıftacairo-create() cihaz bağlamını döndüren yöntem.

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

DrawingArea widget'ı, kendisi tarafından yayılan aşağıdaki sinyallere dayalı olarak geri aramalara bağlanabilir -

Farkına varmak Widget belirli bir ekranda somutlaştırıldığında gerekli eylemleri gerçekleştirmek için.
configure_event Widget boyutu değiştiğinde gerekli işlemleri yapmak için.
expose_event Bir çizim alanı ekrana ilk geldiğinde veya başka bir pencereyle kapatılıp sonra ortaya çıkarıldığında (açığa çıkarıldığında) widget içeriğinin yeniden çizilmesini işlemek için.

Fare ve Klavye olayları ayrıca geri aramaları başlatmak için de kullanılabilir. add_events() method of gtk.Widget class.

DrawingArea tuvali ilk ortaya çıktığında yayılan açığa çıkarma olayı sinyali özellikle ilgi çekicidir. Kahire kütüphanesinde tanımlanan 2B nesnelerin çizilmesi için farklı yöntemler, açığa çıkarma olayı sinyaline bağlı bu geri aramadan çağrılır. Bu yöntemler, Kahire cihaz bağlamında karşılık gelen nesneleri çizer.

Aşağıdakiler mevcut çizim yöntemleridir -

  • dc.rectangle (x, y, w, h) - Bu, belirtilen sol üst koordinatta ve kendisine genişlik ve yüksekliğe sahip bir dikdörtgen çizer.

  • dc.arc (x, y, r, a1, a2) - Bu, belirli bir yarıçap ve iki açı ile dairesel bir yay çizer.

  • dc.line (x1, y1, x2, y2) - Bu, iki koordinat çifti arasında bir çizgi çizer.

  • dc.line_to (x, y) - Bu, mevcut konumdan (x, y) 'ye bir çizgi çizer

  • dc.show_text (str) - mevcut imleç konumunda dizge çizer

  • dc.stroke () - anahat çizer

  • dc.fill () - şekli mevcut renkle doldurur

  • dc.set_color_rgb (r, g, b) - rengi dış çizgiye ayarlar ve 0,0 ile 1,0 arasındaki r, g ve b değerleriyle doldurur

Misal

Aşağıdaki komut dosyası, farklı şekiller çizer ve Kahire yöntemlerini kullanarak test eder.

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

Yukarıdaki komut dosyası aşağıdaki çıktıyı üretecektir -