博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用PyQt实现透明桌面时钟小部件
阅读量:6249 次
发布时间:2019-06-22

本文共 5065 字,大约阅读时间需要 16 分钟。

hot3.png

#!/usr/bin/env python# -*- coding: utf-8 -*-'''Created on 2012-4-6 @author: wangxiao'''import sysfrom PyQt4 import  QtGui, QtCore  from PyQt4.QtCore import Qtfrom PyQt4.QtCore import QPointfrom PyQt4.QtCore import QTimerfrom PyQt4.QtCore import QTime from PyQt4.QtGui import QPainterfrom PyQt4.QtGui import QColor from PyQt4.QtGui import QPolygonfrom PyQt4.QtCore import SIGNAL as signalclass 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 = True         self.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 = True            self.set_transparency(True)             def mouseReleaseEvent(self, e):         if self.rightButton == True:            self.rightButton = False            self.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 = True         def 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

你可能感兴趣的文章
在接口测试中怎么处理开发是否提供接口文档的总结
查看>>
HDU_1086 You can Solve a Geometry Problem too(几何题)
查看>>
在新窗口中打开链接 javascript
查看>>
动物产生式识别系统
查看>>
Jquery UI - DatePicker 在Dialog中无法自动隐藏的解决思路
查看>>
Docker Swarm 让你事半功倍
查看>>
string.Format字符串格式说明
查看>>
POJ 3518 Prime Gap(素数)
查看>>
Python3.6的组件numpy的安装
查看>>
Python的编码问题
查看>>
Javascript 打开模式窗口
查看>>
【听课笔记】MIT领导力课程笔记:施乐前CEO Anne——在火线上得到的经验
查看>>
【Oracle】手工配置Oracle 10G Enterprise Manager【转载】
查看>>
oracle用户状态
查看>>
来玩Play框架01 简介
查看>>
[转]IC行业的牛人
查看>>
linux 16进制 产看文件
查看>>
javaScript事件(四)event的公共成员(属性和方法)
查看>>
Oracle之比较NVARCHAR2字符串
查看>>
linux系统常用命令
查看>>