当前位置:
首页 >
用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实现透明桌面时钟小部件的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 梦到错过飞机代表什么
- 下一篇: Swing-BoxLayout用法-入门