Python3 Gtk3 öyle, o zaman: Burada
from gi.repository import Gtk
class SuperSimpleWidget(Gtk.Label):
__gtype_name__ = 'SuperSimpleWidget'
aslında bir şey yapar önemsiz olmayan bir örnektir, yani boyalar onun arka plan ve içinden çapraz bir çizgi çizer. (Aşağıya bakınız) bazı klişe kurtarmak için
Gtk.Misc
yerine
Gtk.Widget
devralan ediyorum:
class SimpleWidget(Gtk.Misc):
__gtype_name__ = 'SimpleWidget'
def __init__(self, *args, **kwds):
super().__init__(*args, **kwds)
self.set_size_request(40, 40)
def do_draw(self, cr):
# paint background
bg_color = self.get_style_context().get_background_color(Gtk.StateFlags.NORMAL)
cr.set_source_rgba(*list(bg_color))
cr.paint()
# draw a diagonal line
allocation = self.get_allocation()
fg_color = self.get_style_context().get_color(Gtk.StateFlags.NORMAL)
cr.set_source_rgba(*list(fg_color));
cr.set_line_width(2)
cr.move_to(0, 0) # top left of the widget
cr.line_to(allocation.width, allocation.height)
cr.stroke()
gerçekten Gtk.Widget
kaynaklanıyor edinmek istiyorsanız, o zaman da bir çizim arka planı kurmak zorunda. Gtk.Misc
sizin için yapar, ancak Gtk.Widget
aslında kendisinin bir şey çizmeyen bir kap olabilir. Ama soran beyinler bilmek istiyorum, bu yüzden şöyle yapabileceğini :
from gi.repository import Gdk
class ManualWidget(Gtk.Widget):
__gtype_name__ = 'ManualWidget'
def __init__(self, *args, **kwds):
# same as above
def do_draw(self, cr):
# same as above
def do_realize(self):
allocation = self.get_allocation()
attr = Gdk.WindowAttr()
attr.window_type = Gdk.WindowType.CHILD
attr.x = allocation.x
attr.y = allocation.y
attr.width = allocation.width
attr.height = allocation.height
attr.visual = self.get_visual()
attr.event_mask = self.get_events() | Gdk.EventMask.EXPOSURE_MASK
WAT = Gdk.WindowAttributesType
mask = WAT.X | WAT.Y | WAT.VISUAL
window = Gdk.Window(self.get_parent_window(), attr, mask);
self.set_window(window)
self.register_window(window)
self.set_realized(True)
window.set_background_pattern(None)
Düzenleme ve aslında kullanmak için:
w = Gtk.Window()
w.add(SimpleWidget())
w.show_all()
w.present()
import signal # enable Ctrl-C since there is no menu to quit
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
Ya da daha eğlenceli, doğrudan kullanmak ipython3 REPL:
from IPython.lib.inputhook import enable_gtk3
enable_gtk3()
w = Gtk.Window()
w.add(SimpleWidget())
w.show_all()
w.present()
Bu blog'unuzdan değil mi? "Bu, GTK 2'de çalışılan şeylerden oldukça farklıdır ve muhtemelen internette dolaşan GTK 2 talimatının büyük bir kısmı vardır." Bunu daha açık hale getirmek için bir GTK 3 tekniği olduğunu açıkça söylemenizi tavsiye ederim. – knocte
ve bu cevabı gerçekten bir örnek vermediğinden, bu cevabı SOLVED olarak işaretleyeceğime emin değilim, ancak – knocte
numaralı bağlantı için teşekkürler, cevabınızı da tatmin edici bir şekilde yanıtlayacağını düşünmüyorum. :-( – ptomato