桌面小部件管理器。想想康基,但用巨蟒而不是Lua。
blight的Python项目详细描述
< BR>< BR>
桌面小部件管理器
想想康基,但用python而不是lua。
阿尔法
概要
"枯萎病"项目的灵感来自康基。本质上,它是 对象,使您能够快速创建可绘制的透明窗口 开罗那边。但是,与其用lua编写小部件,这可能会导致 将python称为外部工具,现在可以用python编写它们的本地代码。
性能不会像康基那么好,可能会用到更多的资源 对于相同的最终结果,但是本机python支持可以提供更多 您只需轻轻一按手指就可以定制。
你不可能在开箱即用的情况下做很多事情, 这项工程尚处于初期阶段。如果你喜欢这个主意,我们非常欢迎你 为这个项目做贡献!
要求
- X11
- 新erama
- 开罗
- 蟒蛇3
- python3 gi(仅适用于GTK Windows)
- GIR1.2-GTK-3.0(仅适用于GTK车窗)
- gir1.2-glib-2.0(仅适用于GTK Windows)
安装
目前,blotty需要从其源代码构建。以下 安装说明已经在ubuntu 18.04上测试过了。如果你在使用 不同的发行版,请确保安装所有列出的依赖项 从您的软件包存储库。
要安装所需的依赖项,请使用以下命令
sudo apt install xorg libxinerama-dev libcairo2-dev python3-gi gir1.2-gtk-3.0 gir1.2-glib-2.0
安装B使用pypi中的lighty命令
sudo -H python3 -m pip install blighty --upgrade
如果在从pypi安装blighty时遇到任何问题,请安装它 直接从github使用以下命令。
sudo -H python3 -m pip install git+https://github.com/P403n1x87/blighty.git --upgrade
用法
官方文件存放在
阅读docs.io。参考代码
在examples
文件夹中查找一些简单的示例。
此软件包使您可以轻松创建透明窗口
使用cairo
。它把所有的样板代码从你身上拿走,这样你就可以
只需专注于艺术作品,就像关注康基一样。
x11画布
这是你目前能得到的最接近康基的,而且 推荐使用白叶枯病的方法。使用以下方法创建窗口 直接使用XLIB。
fromblightyimportCanvasGravityfromblighty.x11importCanvas,start_event_loopclassMyCanvas(Canvas):defon_draw(self,context):# context is an instance of a cairo context.# Refer to the Pycairo documentation.if__name__=="__main__":x,y,width,height=10,10,200,200# Instantiate the canvascanvas=MyCanvas(10,10,width=200,height=200,gravity=CanvasGravity.SOUTH_EAST)# Map it on screencanvas.show()# Start the event loopstart_event_loop()
该模块实现一个基本的事件循环,以便用户与
画布可以处理。您可以通过实现
要创建基于gtk的画布,可以使用canvas的子类中的
on_key_pressed(self,keysym,state)
和on_button_pressed(self,button,state,x,y)
方法
GTK画布
blighty.gtk.canvas
类,该类
只是gtk.window的一个子类
fromtimeimportsleepimportblighty.gtkasbclassMyCanvas(b.Canvas):defon_draw(self,widget,cr):# Similar to the X11 case. However, note how# you have access to the whole GTK window# via the `widget` parameter. In principle you# can exploit it to add extra child widgets.# Use wisely.if__name__=="__main__":canvas=MyCanvas(0,0,width=320,height=240)canvas.show_all()b.start_event_loop()
动画
可以通过canvas.interval
属性控制动画。这就是
画布连续重绘之间所经过的时间(毫秒)。
画笔
自1.1.0版起
请考虑以下时钟小部件的简单示例。
fromblightyimportCanvasGravityfromblighty.x11importCanvas,start_event_loopimportdatetimefrommathimportpiasPIclassClock(Canvas):defon_button_pressed(self,button,state,x,y):self.dispose()defhand(self,ctx,angle,length,thickness):ctx.save()ctx.set_source_rgba(1,1,1,1)ctx.set_line_width(thickness)ctx.rotate(angle)ctx.move_to(0,length*.2)ctx.line_to(0,-length)ctx.stroke()ctx.restore()defon_draw(self,ctx):now=datetime.datetime.now()ctx.translate(self.width>>1,self.height>>1)self.hand(ctx,angle=now.second/30*PI,length=(self.height>>1)*.9,thickness=1)mins=now.minute+now.second/60self.hand(ctx,angle=mins/30*PI,length=(self.height>>1)*.8,thickness=3)hours=(now.hour%12)+mins/60self.hand(ctx,angle=hours/6*PI,length=(self.height>>1)*.5,thickness=6)
显然,hand
方法更适合于
cairo上下文ctx
。如果我们可以称之为
ctx.hand
。画笔允许您将方法从画布
子类重新绑定到
开罗的背景。用
fromblightyimportbrush
使用它来修饰hand
方法。self
参数不再是
必须,因为它将被cairo上下文实例替换。所以以上
代码变为
fromblightyimportCanvasGravity,brushfromblighty.x11importCanvas,start_event_loopimportdatetimefrommathimportpiasPIclassClock(Canvas):defon_button_pressed(self,button,state,x,y):self.dispose()@brushdefhand(ctx,angle,length,thickness):ctx.save()ctx.set_source_rgba(1,1,1,1)ctx.set_line_width(thickness)ctx.rotate(angle)ctx.move_to(0,length*.2)ctx.line_to(0,-length)ctx.stroke()ctx.restore()defon_draw(self,ctx):now=datetime.datetime.now()ctx.translate(self.width>>1,self.height>>1)ctx.hand(angle=now.second/30*PI,length=(self.height>>1)*.9,thickness=1)mins=now.minute+now.second/60ctx.hand(angle=mins/30*PI,length=(self.height>>1)*.8,thickness=3)hours=(now.hour%12)+mins/60ctx.hand(angle=hours/6*PI,length=(self.height>>1)*.5,thickness=6)
默认情况下,以 画笔是通过类extendedcontext实现的
包装 从3.0.0版开始
如果你真的不能没有康奇的外观,布莱蒂提供给你康奇喜欢的图表开箱。 您所要做的就是通过指定图形的位置和大小来创建 gplv3.draw开头的
canvas
子类的方法是
在on_draw
方法中重新绑定到cairo上下文。同上
不使用画笔就可以实现代码
fromblightyimportCanvasGravityfromblighty.x11importCanvas,start_event_loopimportdatetimefrommathimportpiasPIclassClock(Canvas):defon_button_pressed(self,button,state,x,y):self.dispose()defdraw_hand(ctx,angle,length,thickness):ctx.save()ctx.set_source_rgba(1,1,1,1)ctx.set_line_width(thickness)ctx.rotate(angle)ctx.move_to(0,length*.2)ctx.line_to(0,-length)ctx.stroke()ctx.restore()defon_draw(self,ctx):now=datetime.datetime.now()ctx.translate(self.width>>1,self.height>>1)ctx.draw_hand(angle=now.second/30*PI,length=(self.height>>1)*.9,thickness=1)mins=now.minute+now.second/60ctx.draw_hand(angle=mins/30*PI,length=(self.height>>1)*.8,thickness=3)hours=(now.hour%12)+mins/60ctx.draw_hand(angle=hours/6*PI,length=(self.height>>1)*.5,thickness=6)
cairo.context
。传递给draw上的回调的参数是
因此是这个类的一个实例。为了方便起见,它公开了
通过
canvas
属性的canvas实例,这样就不需要传递它了
当需要访问某些画布属性(例如
其大小)或方法。类康基图
blighty.legacy.graph
的实例。也可以传递scale
参数,该参数默认设置为100
并定义图形的y比例。如果希望图形自动缩放,请使用scale=none
。使用push-value方法将值推送到图形中,并使用draw方法在画布上绘制,该方法需要cairo上下文作为参数。许可证
推荐PyPI第三方库