我无法使用自定义 cairo 代码渲染自定义 GTK3 绘图区域。cairo 上下文似乎不想为我指定的形状带来麻烦。无论形状如何,它将整个源写入整个目的地。
例如,如果我设置一个全白的源区域来绘制一个小的白色矩形,然后我向fill()
那个矩形询问 cairo,它会绘制整个 DrawingArea 小部件而不是那个矩形。我在这里想念什么?
#!/usr/bin/env python3
from gi.repository import Gtk as gtk
from gi.repository import Gdk as gdk
import cairo
class Canvas(gtk.DrawingArea):
def __init__(self):
gtk.DrawingArea.__init__(self)
self.set_size_request(600,400)
self.connect('draw',Canvas.on_draw)
def on_draw(self,context):
context.set_source_rgb( 0.1, 0.0, 0.1 )
context.fill()
context.set_source_rgb( 1.0, 1.0, 1.0 )
context.rectangle(50,50,100,100)
context.fill()
context.paint()
return False
#look at this code
class MainWindow(gtk.Window):
def __init__(self):
gtk.Window.__init__(self, title="Game Centurion")
self.dummy0 = gtk.Label(label="dummy₀")
self.canvas = Canvas()
self.box = gtk.Box()
self.box.pack_start(self.canvas, True, True, 0)
self.box.pack_start(self.dummy0, True, True, 0)
self.add(self.box)
self.connect('delete-event', gtk.main_quit)
if __name__ == '__main__':
w = MainWindow()
w.show_all()
gtk.main()
这是结果窗口,您可以看到它是全白的,而不是像我在上面的代码中指定的那样在深紫色背景上显示一个小白色方块。
感谢您的任何帮助。