gpt4 book ai didi

window - PyGTK 透明窗口

转载 作者:行者123 更新时间:2023-12-04 05:45:01 29 4
gpt4 key购买 nike

我希望窗口透明,但标签的不透明度为 100%。我怎样才能做到这一点?顺便说一句:当我升级到 Ubuntu 12.04 的统一界面时,我注意到 window.set_opacity 不像在 GNOME 上那样工作,但即使它做到了,窗口内的所有内容也会变得透明。

这是我开始使用的代码...

#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk
import pango
import time

class Clock:

def __init__(self):
me = gtk.Window(gtk.WINDOW_TOPLEVEL)
me.connect("destroy", lambda w: gtk.main_quit())
me.set_decorated(False)
me.set_has_frame(False)
me.set_resizable(False)
me.set_property('skip-taskbar-hint', True)
self.label = gtk.Label()
self.label.modify_font(pango.FontDescription("FreeSerif Bold 50"))
attr = pango.AttrList()
fg_color = pango.AttrForeground(65535, 0, 0, 0, 65535)
attr.insert(fg_color)
self.label.set_attributes(attr)

me.add(self.label)
me.show_all()

def update(self):
self.label.set_text(time.strftime('%H:%M:%S'))
return True

clock = Clock()
gtk.timeout_add(200, clock.update)
gtk.main()

我找到了 this关于 askubuntu 的主题,这正是我正在寻找的内容,但是现在我在显示数字时钟时遇到了问题。任何帮助将不胜感激。

这是我的代码。
#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk
import pango
import time
import cairo

class Clock (gtk.Window):
def __init__(self):
super(Clock, self).__init__()
self.connect("destroy", lambda w: gtk.main_quit())
self.set_decorated(False)
self.set_has_frame(False)
self.set_resizable(False)
self.set_property('skip-taskbar-hint', True)
self.label = gtk.Label()
self.label.modify_font(pango.FontDescription("FreeSerif Bold 50"))
attr = pango.AttrList()
fg_color = pango.AttrForeground(65535, 0, 0, 0, 65535)
attr.insert(fg_color)
self.label.set_attributes(attr)

self.screen = self.get_screen()
self.visual = self.screen.get_rgba_visual()
self.set_visual(self.visual)
self.set_app_paintable(True)
self.connect("draw", self.area_draw)

self.add(self.label)
self.show_all()

def update(self):
self.label.set_text(time.strftime('%H:%M:%S'))
return True

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

clock = Clock()
gtk.timeout_add(200, clock.update)
gtk.main()

最佳答案

好吧,您必须进行大量修改才能制作这样的标签。
最好的办法是重新发明轮子:做一个圆形的。

绘制自己的标签。
获取窗口上下文 (mywin.window.cairo_create())) 并跟踪 x、y。

def draw(*args):
ctx = win.window.cairo_create()
ctx.set_source_rgba(0, 0, 0, 0)
ctx.set_operator(0) # OPERATOR_CLEAR
ctx.paint()
ctx.set_source_rgba(0, .6, 1, .3)
ctx.arc(w/2, h/2, w/2, 0, 2*3.1415)
ctx.fill()
ctx.set_source_rgba(1, .8, 0, 1)
ctx.show_text('29-May-1234') #you have some work for font, style and so on

google 为您提供了一个使用 ctypes 从文件加载 ttf 字体的 hack;它在 Linux 上运行良好(我不知道 win 上)。
注意:上面假设你有一个合成管理器,或者......小部件的 rgba 是无。
还放一个
colormap = self.win.get_screen().get_rgba_colormap()
if colormap == None: colormap = self.win.get_screen().get_rgb_colormap()
gtk.widget_set_default_colormap(colormap)

如果可能,设置 rgba,也值得一试:
if self.win.is_composited():print ('OK!')
else:self.bg = self.capt_screen()

...........

def capt_screen(self):
x, y = self.win.get_position()
win = gtk.gdk.get_default_root_window()
w, h = win.get_size()
pb = gtk.gdk.Pixbuf(0 , False, 8, w, h)
self.win.hide()
pb = pb.get_from_drawable(win, win.get_colormap(), 0, 0, 0, 0, w, h)
self.win.show_all()
if (pb != None):
im = Image.fromstring('RGB', (w, h), pb.get_pixels())
im = im.crop((x, y, x + self._w, y + self._h))
im = im.convert('RGBA')
return im #or pb

上面是“xp”透明效果:复制bg并用你的胜利bledit。仅当它不是正在运行的合成管理器时。可以用于小部件 - 留在办公 table 上,但 flickr 用于其他东西:在每个刷新窗口都必须隐藏自身,捕获 gb,绘制和显示。

PS:我有一个工作时钟示例,但我使用 png。如果您愿意,我可以通过邮件向您发送 tar.gz

关于window - PyGTK 透明窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782527/

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