欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2023/11/29 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 用PyQt实现透明桌面时钟小部件 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

#!/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

总结

以上是生活随笔为你收集整理的用PyQt实现透明桌面时钟小部件的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。