用PyQt实现透明桌面时钟小部件

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2012-4-6@author: wangxiao
'''
import sys
from PyQt4 import  QtGui, QtCore  
from PyQt4.QtCore import Qt
from PyQt4.QtCore import QPoint
from PyQt4.QtCore import QTimer
from PyQt4.QtCore import QTime 
from PyQt4.QtGui import QPainter
from PyQt4.QtGui import QColor 
from PyQt4.QtGui import QPolygon
from PyQt4.QtCore import SIGNAL as signal
class Clock(QtGui.QWidget):'''classdocs'''def __init__(self):'''Constructor'''super(Clock, self).__init__()  self.hourColor = QColor(127, 0, 127);self.minuteColor = QColor(0, 127, 127, 191)self.secondColor = QColor(127, 127, 0, 120)self.initUI()self.timer = QTimer()self.timer.timeout.connect(self.update)self.timer.start(30) self.show() def handChange(self):    self.side = min(self.width(), self.height())self.hand = (max(self.side / 200, 4), max(self.side / 100, 8), max(self.side / 40, 30))self.hourHand = QPolygon([QPoint(self.hand[0], self.hand[1]), QPoint(-self.hand[0], self.hand[1]), QPoint(0, -self.hand[2])])self.minuteHand = QPolygon([QPoint(self.hand[0], self.hand[1]), QPoint(-self.hand[0], self.hand[1]), QPoint(0, -self.hand[2] * 2)])self.secondHand = QPolygon([QPoint(self.hand[0], self.hand[1]), QPoint(-self.hand[0], self.hand[1]), QPoint(0, -self.hand[2] * 3)]) def set_transparency(self, enabled):if enabled:self.setAutoFillBackground(False)else:self.setAttribute(Qt.WA_NoSystemBackground, False)# 下面这种方式好像不行
#        pal=QtGui.QPalette()
#        pal.setColor(QtGui.QPalette.Background, QColor(127, 127,10,120))
#        self.setPalette(pal) self.setAttribute(Qt.WA_TranslucentBackground, enabled)self.repaint()def initUI(self):      self.setGeometry(300, 300, 300, 200)self.setWindowTitle('Clock')self.handChange()self.rightButton = False# 下面两个配合实现窗体透明和置顶sizeGrip = QtGui.QSizeGrip(self)self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SubWindow) # self.setMouseTracking(True);self.trans = Trueself.set_transparency(True) quitAction = QtGui.QAction(QtGui.QIcon('quit.png'), '&Quit', self)self.connect(quitAction, signal("triggered()"), QtGui.qApp.quit)backAction = QtGui.QAction('&Back', self)self.connect(backAction, signal("triggered()"), self.backClicked)self.popMenu = QtGui.QMenu() self.popMenu.addAction(quitAction) self.popMenu.addAction(backAction) def resizeEvent(self, e):  self.handChange()def backClicked(self):if self.trans == True :self.trans = False self.set_transparency(False)else: self.trans = Trueself.set_transparency(True)def mouseReleaseEvent(self, e): if self.rightButton == True:self.rightButton = Falseself.popMenu.popup(e.globalPos())def mouseMoveEvent(self, e):if e.buttons() & Qt.LeftButton:self.move(e.globalPos() - self.dragPos)e.accept()def mousePressEvent(self, e):if e.button() == Qt.LeftButton: self.dragPos = e.globalPos() - self.frameGeometry().topLeft() e.accept()if e.button() == Qt.RightButton and self.rightButton == False:self.rightButton = Truedef paintEvent(self, e): time = QTime.currentTime() qp = QPainter()qp.begin(self)# qp.setRenderHint(QPainter.Antialiasing)  # 开启这个抗锯齿,会很占cpu的!qp.translate(self.width() / 2, self.height() / 2) qp.scale(self.side / 200.0, self.side / 200.0)qp.setPen(QtCore.Qt.NoPen)qp.setBrush(self.hourColor)qp.save()qp.rotate(30.0 * ((time.hour() + time.minute() / 60.0)))qp.drawConvexPolygon(self.hourHand)qp.restore()qp.setPen(self.hourColor)for i in range(12): qp.drawLine(88, 0, 96, 0)qp.rotate(30.0) qp.setPen(QtCore.Qt.NoPen)qp.setBrush(self.minuteColor)qp.save()qp.rotate(6.0 * ((time.minute() + (time.second() + time.msec() / 1000.0) / 60.0)))qp.drawConvexPolygon(self.minuteHand)qp.restore()qp.setPen(self.minuteColor)for i in range(60): if (i % 5) is not 0:qp.drawLine(92, 0, 96, 0)qp.rotate(6.0) qp.setPen(QtCore.Qt.NoPen)qp.setBrush(self.secondColor)qp.save()qp.rotate(6.0 * (time.second() + time.msec() / 1000.0))qp.drawConvexPolygon(self.secondHand)qp.restore() qp.end() 
if __name__ == '__main__':app = QtGui.QApplication(sys.argv)clock = Clock()sys.exit(app.exec_())


转载于:https://my.oschina.net/yzbty32/blog/475727

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现织梦dedecms百度主动推送(实时)网页抓取

做百度推广的时候,如何让百度快速收录呢,下面提供了三种方式,今天我们主要讲的是第一种。 如何选择链接提交方式 1、主动推送:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保…

【RK3399Pro学习笔记】十八、点亮LED灯(python、C语言、bash)

目录GPIOpython3python-peripherypython2RPiC语言SysFs方式编写gpiolib.cgpiolib.hmain.c编译测试wiringPibash平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本:Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 GPIO (机翻)下表显示了座子的引脚&am…

Linux中python、C++和C语言的多线程用法整理(_thread、threading、thread和pthread)

目录python3开始学习Python线程_thread常量和函数:锁对象试用基本功能试用线程同步threading函数常量类线程本地数据线程对象锁对象递归锁对象条件对象信号量对象Semaphore 例子事件对象定时器对象栅栏对象在 with 语句中使用锁、条件和信号量测试Cstd::threadstd::…

Swing-BoxLayout用法-入门

注:本文内容源于http://www.java3z.com/cwbwebhome/article/article20/200016.html?id4797;细节内容根据笔者理解有修改。 BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_AXIS 表示水平排列&a…

Python开发利器之UliPad

一、安装Ulipad 因为ulipad编辑器使用的是wxpython编写的gui,所以我们需要第三方库wxpython的支持,先讲一下Ulipad在Windows系统环境下的安装: 1. 确实自己的windows版本,32位还是64位的。2. 查看自己安装的 Python版本&#xff0…

flask接收前台的form数据

html 记得访问从服务里打开 表单html 不能直接打开表单html https://www.cnblogs.com/wanghaonull/p/6340096.html

树莓派Raspbian Buster/Debian 10 安装ROS

目录一些补充安装ROS初始化rosdep测试平台:树莓派4B 系统版本: 2020-05-27-raspios-buster-arm64.img 一些补充 系统安装参考 【树莓派学习笔记】一、烧录系统、(无屏幕)配置Wifi和SSH服务 【树莓派学习笔记】二、(无屏幕)SSH远程登录、图形界面及系统…

树莓派安装Ubuntu MATE及ROS系统

目录解锁SSH换源安装VNC服务安装ROS初始化rosdep和环境测试平台:树莓派4B 系统版本: ubuntu-mate-20.04.1-desktop-armhfraspi.img 在Raspberry Pi Download Options下载系统镜像 在树莓派资源下载 | 树莓派实验室下载工具 使用SDForm…

jQuery学习笔记(四)

jQuery对表单、表格的操作及更多应用 表单应用 一个表单组成部分: 表单标签、表单域及表单按钮 单行文本框应用获取和失去焦点事件 $(function(){ $(":input").focus(function(){ //获取焦点触发事件 $(this).addClass("focus"); //增加样…

Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

https://www.cnblogs.com/DragonFire/p/9259999.html 是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符串,用于传递到前端 STUDENT {name: Old, age:…

【Jetson Nano学习笔记】1. 系统镜像和ROS的安装

目录安装系统换源安装VNC服务安装ROS初始化rosdep和环境测试平台:Jetson Nano 系统版本:4.6.1 安装系统 在Jetson Download Center下载镜像: 在树莓派资源下载 | 树莓派实验室下载工具 使用SDFormatter格式化内存卡 使用balenaEtcher烧录镜…

我的Android进阶之旅------Android利用Sensor(传感器)实现水平仪功能的小例

这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体,液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端。 利用方向传感器返回的第一个参数,实现了一个指南针小应用。我的And…

【Jetson Nano学习笔记】2. ORB-SLAM3及ZED 2i驱动安装

目录ZED 2i驱动安装安装驱动自测ROS测试zed2i.launchrostopic listrosnode listdisplay_zed2i.launchzed_rtabmap.launchORB-SLAM3安装OpenCV 3安装Glew安装Pangolin安装boost安装Eigen 3安装OpenGL安装openssl安装ORB-SLAM3建立swap准备编译编译关闭swap平台:Jetso…

proj1088

滑雪Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 69608 Accepted: 25669Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走…

【Jetson Nano学习笔记】3. ORB-SLAM3运行双目Demo(ZED 2i)

目录修改zed-ros-wrapper的参数双目测试平台:Jetson Nano 系统版本:4.6.1 参考资料: zed-ros-wrapper —— ROS Wiki ZED 相机 && ORB-SLAM2安装环境配置与ROS下的调试 —— 李小铭 又一遍……ORB_SLAM2ZED相机(SDK2.2.1)CUDA9.0ROS…

MySQL数据库和ACID模型

2019独角兽企业重金招聘Python工程师标准>>> ACID模型是一组强调高可靠性的数据库系统设计原则。InnoDB存储引擎坚持ACID原则,确保即使在软件崩溃甚至是硬件故障的情况下,数据也不会损坏。当你需要依赖兼容ACID原则的业务时,你不必…

【Jetson Nano学习笔记】4. python 3编译bridge

目录使用python3编译boostconsole_bridgepython3bridge平台:Jetson Nano 系统版本:4.6.1 参考资料: How to setup ROS with Python 3 Unable to use cv_bridge with ROS Kinetic and Python3 CMake Error :Could not find a pac…

python time模块详解

2019独角兽企业重金招聘Python工程师标准>>> python time模块详解 分类: python2009-03-28 23:35 89831人阅读 评论(9) 收藏 举报 pythonstructstringdstimportdate python 的内嵌time模板翻译及说明 一、简介 time模块提供各种操作时间的函数 说明&am…

【RK3399Pro学习笔记】十九、在ROS中点亮LED灯

目录创建ROS工作空间创建ROS功能包CSysFs方式(需root)源文件blink.cppgpiolib.cpp头文件gpiolib.hCMakeLists.txt运行代码调用shell命令方式(无需root)源文件blink.cppCMakeLists.txt运行代码平台:华硕 Thinker Edge R…

LaTex bib引用知网论文NoteExpress格式文献 —— cnki2bib

目录先决条件安装使用最后…棘手的用法简单用法获取NoteExpress格式到剪贴板将剪贴板内容转换在LaTex中使用调用格式效果TeXstudio 4.2.3 Windows 10 20H2 以下内容引自Python cnki2bib包介绍 先决条件 Python3 安装 pip install cnki2bibWinR打开cmd使用以上命令安装 使…