gpt4 book ai didi

Python - 如何使用 gtk.Window 而不是 Gtk.Window 制作透明窗口?

转载 作者:行者123 更新时间:2023-11-28 21:22:15 24 4
gpt4 key购买 nike

如何使 gtk.Window(我指的不是 import Gtk,Gtk.Window)透明?例如对 import gtk, gtk.Window 做同样的事情?

#!/usr/bin/env python
import cairo
from gi.repository import Gtk, Gdk

class MyWin (Gtk.Window):
def __init__(self):
super(MyWin, self).__init__()
self.set_position(Gtk.WindowPosition.CENTER)

self.set_size_request(300, 220)
self.set_border_width(11)

self.screen = self.get_screen()
self.visual = self.screen.get_rgba_visual()
if self.visual != None and self.screen.is_composited():
print "yay"
self.set_visual(self.visual)

self.set_app_paintable(True)
self.connect("draw", self.area_draw)
self.show_all()

def area_draw(self, widget, cr):
cr.set_source_rgba(.2, .2, .2, 0.3)
cr.set_operator(cairo.OPERATOR_SOURCE)
cr.paint()
cr.set_operator(cairo.OPERATOR_OVER)

MyWin()
Gtk.main()

最佳答案

(注意:一种更简单的方法是使用 Gtk.Window.set_opacity(),它适用于旧的 pygtk 和新的基于内省(introspection)的绑定(bind)。这有一个缺点,至少在我的系统上,它似乎使窗口控件和窗口内容一样透明。)

以下是您的代码适用于 GTK2 和旧的 pygtk 绑定(bind)。如您所见,它几乎完全相同。唯一真正的变化是我们检查 RGBA gtk.gdk.Colormap 而不是检查然后设置 RGBA Gdk.Visual(当然我们必须将 draw 回调更改为 expose-event,但我相信您已经知道了:-) )

#!/usr/bin/env python
import cairo
import gtk

class MyWin (gtk.Window):
def __init__(self):
super(MyWin, self).__init__()
self.set_position(gtk.WIN_POS_CENTER)

self.set_size_request(300, 220)
self.set_border_width(11)

self.screen = self.get_screen()
colormap = self.screen.get_rgba_colormap()
if (colormap is not None and self.screen.is_composited()):
print "yay"
self.set_colormap(colormap)

self.set_app_paintable(True)
self.connect("expose-event", self.area_draw)
self.show_all()

def area_draw(self, widget, event):
cr = widget.get_window().cairo_create()
cr.set_source_rgba(.2, .2, .2, 0.3)
cr.set_operator(cairo.OPERATOR_SOURCE)
cr.paint()
cr.set_operator(cairo.OPERATOR_OVER)
return False

MyWin()
gtk.main()

关于Python - 如何使用 gtk.Window 而不是 Gtk.Window 制作透明窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19577367/

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