桌面小部件管理器。想想康基,但用巨蟒而不是Lua。

blight的Python项目详细描述


< BR>austin< BR>

桌面小部件管理器

想想康基,但用python而不是lua。

travis ci build statusdocumentation statusPYPI versionpypi downloadsversion 3.0.0source{d}设计文件

阿尔法

概要•。 需求安装 用法

概要

"枯萎病"项目的灵感来自康基。本质上,它是 对象,使您能够快速创建可绘制的透明窗口 开罗那边。但是,与其用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()

该模块实现一个基本的事件循环,以便用户与 画布可以处理。您可以通过实现 canvas的子类中的on_key_pressed(self,keysym,state)on_button_pressed(self,button,state,x,y)方法

GTK画布

要创建基于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)

默认情况下,以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)

画笔是通过类extendedcontext实现的 包装cairo.context。传递给draw上的回调的参数是 因此是这个类的一个实例。为了方便起见,它公开了 通过canvas属性的canvas实例,这样就不需要传递它了 当需要访问某些画布属性(例如 其大小)或方法。

类康基图

从3.0.0版开始

如果你真的不能没有康奇的外观,布莱蒂提供给你康奇喜欢的图表开箱。

您所要做的就是通过指定图形的位置和大小来创建blighty.legacy.graph的实例。也可以传递scale参数,该参数默认设置为100并定义图形的y比例。如果希望图形自动缩放,请使用scale=none。使用push-value方法将值推送到图形中,并使用draw方法在画布上绘制,该方法需要cairo上下文作为参数。

许可证

gplv3.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用gitlabci进行GUI测试(java swing)时出现无头异常   tomcatjavaee:在调用时运行一个方法。战争已经展开   java将文档中章节的超链接插入XWPFTable中的单元格   无法将java扫描程序转换为int   java Axis2:只加载一次模块   java JAXB列表中的不同元素   java如何过滤字符串但保留一些标记   java如何检索列表中具有特定属性的所有对象?   java如何在jni中读取2D数组   java Android Studio:非语句错误   java一直在刷新gradle项目。引擎盖下发生了什么?   java如何在其他类中实现接口和扩展   java如何在travis构建期间使用gpg2导入私钥?   JavaSpringAOP:将参数传递到目标方法:paramsnull。为什么?   java Autocompletetextview建议宽度填充父级   java查询生成器仅在输入值不为null时创建更新语句   java从InputStream到并行流<T>   java空共享首选项导致我的应用程序崩溃   JavaTomcat:Tomcat Lib文件夹的位置   java如何在网站上显示GitHub时间表/提要