PyQt制作支持拖动缩放小时钟,pyqt拖动缩放,这个用PyQt制作支持拖


这个用PyQt制作支持拖动缩放小时钟Python源代码是一位网友写的,感觉效果不错拿来测试并改进下。还没有开始操作先分享给大家一起看看。

虽然这个代码是2012年比较早了,但略微改动下,应该还是可以使用的。

#coding=utf-8'''Created on 2012-4-6'''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.minuteColor2000)        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_())#www.iplaypy.com

编橙之家文章,

评论关闭