gpt4 book ai didi

Python GTK - 不透明的绘图区

转载 作者:行者123 更新时间:2023-12-04 11:47:45 24 4
gpt4 key购买 nike

我正在处理一个透明窗口,其中包括一个 DrawingArea 小部件,它以纯色背景色位于顶部,但我想保持它透明。我已经尝试了所有方法,不幸的是文档有点过时(PyGTK 位于最高结果)。我所做的其他事情是连接它的 draw事件,因为我正在用窗口做它,但没有成功。

当然我需要显示正方形,所以我只需要背景颜色透明。我也试过 modify_bg ,但我只设法将其设置为纯色。

这是我到目前为止所拥有的。

#!/usr/bin/env python

from gi.repository import Gtk, Gdk
import cairo

class GWin (Gtk.Window):
def __init__(self):
super(GWin, self).__init__()
self.set_position(Gtk.WindowPosition.CENTER)
self.screen = self.get_screen()
self.visual = self.screen.get_rgba_visual()
if self.visual != None and self.screen.is_composited():
self.set_visual(self.visual)
self.connect("draw", self.on_win_draw)
self.set_app_paintable(True)
self.show_all()
self.draw_area = Gtk.DrawingArea()
self.draw_area.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
self.draw_area.connect('draw', self.begin_draw)
self.draw_area.show()
self.add(self.draw_area)

def begin_draw(self, draw_area, cairo_context):
cairo_context.rectangle(20, 20, 120, 120)
cairo_context.stroke()

def on_win_draw(self, widget, cr):
cr.set_source_rgba(1, 1, 1, 0.1)
cr.set_operator(cairo.OPERATOR_SOURCE)
cr.paint()
cr.set_operator(cairo.OPERATOR_OVER)

win = GWin()
win.connect('delete-event', Gtk.main_quit)
Gtk.main()

最佳答案

您需要设置 cairo.Context在创建矩形之前源 rgba。这是代码,标记为 ### ADDED THIS LINE 的编辑行:

#!/usr/bin/env python

from gi.repository import Gtk, Gdk
import cairo

class GWin (Gtk.Window):
def __init__(self):
super(GWin, self).__init__()
self.set_position(Gtk.WindowPosition.CENTER)
self.screen = self.get_screen()
self.visual = self.screen.get_rgba_visual()
if self.visual != None and self.screen.is_composited():
self.set_visual(self.visual)
self.connect("draw", self.on_win_draw)
self.set_app_paintable(True)
self.show_all()
self.draw_area = Gtk.DrawingArea()
self.draw_area.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
self.draw_area.connect('draw', self.begin_draw)
self.draw_area.show()
self.add(self.draw_area)

def begin_draw(self, draw_area, cairo_context):
cairo_context.set_source_rgba(1, 1, 1, 1) ### ADDED THIS LINE
cairo_context.rectangle(20, 20, 120, 120)
cairo_context.stroke()

def on_win_draw(self, widget, cr):
cr.set_source_rgba(1, 1, 1, 0.1)
cr.set_operator(cairo.OPERATOR_SOURCE)
cr.paint()
cr.set_operator(cairo.OPERATOR_OVER)

win = GWin()
win.connect('delete-event', Gtk.main_quit)
Gtk.main()

关于Python GTK - 不透明的绘图区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21226443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com