**pyqt_example_learn<shapedclock>

 
  
# from pyqt_example

import
sys
from PyQt4 import QtGui,QtCore

class ShapedClock(QtGui.QWidget):
hourHand
= QtGui.QPolygon([
QtCore.QPoint(
7 , 8 ),
QtCore.QPoint(
- 7 , 8 ),
QtCore.QPoint(0,
- 40 )
])

minuteHand
= QtGui.QPolygon([
QtCore.QPoint(
7 , 8 ),
QtCore.QPoint(
- 7 , 8 ),
QtCore.QPoint(0,
- 70 )
])

hourColor
= QtGui.QColor( 127 , 0, 127 )
minuteColor
= QtGui.QColor(0, 127 , 127 , 191 )

def __init__ (self,parent = None):
super(ShapedClock,self).
__init__ (parent,
QtCore.Qt.FramelessWindowHint
| QtCore.Qt.WindowSystemMenuHint)
timer
= QtCore.QTimer(self)
timer.timeout.connect(self.update)
timer.start(
1000 )

quit_action
= QtGui.QAction( " E&xit " ,self,shortcut = " Ctrl+Q " ,
triggered
= QtGui.qApp.quit)
self.addAction(quit_action)
self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
self.setToolTip(
' xxx ' )
self.setWindowTitle(self.tr(
" clock " ))
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.dragPosition
= event.globalPos() - self.frameGeometry().topLeft()
event.accept()

def mouseMoveEvent(self, event):
if event.buttons() == QtCore.Qt.LeftButton:
self.move(event.globalPos()
- self.dragPosition)
event.accept()
def paintEvent(self, event):
side
= min(self.width(), self.height())
time
= QtCore.QTime.currentTime()

painter
= QtGui.QPainter(self)
painter.setRenderHint(QtGui.QPainter.Antialiasing)
painter.translate(self.width()
/ 2 , self.height() / 2 )
painter.scale(side
/ 200.0 , side / 200.0 )

painter.setPen(QtCore.Qt.NoPen)
painter.setBrush(ShapedClock.hourColor)

painter.save()
painter.rotate(
30.0 * ((time.hour() + time.minute() / 60.0 )))
painter.drawConvexPolygon(ShapedClock.hourHand)
painter.restore()

painter.setPen(ShapedClock.hourColor)

for i in range( 12 ):
painter.drawLine(
88 , 0, 96 , 0)
painter.rotate(
30.0 )

painter.setPen(QtCore.Qt.NoPen)
painter.setBrush(ShapedClock.minuteColor)

painter.save()
painter.rotate(
6.0 * (time.minute() + time.second() / 60.0 ))
painter.drawConvexPolygon(ShapedClock.minuteHand)
painter.restore()

painter.setPen(ShapedClock.minuteColor)

for j in range( 60 ):
if (j % 5 ) != 0:
painter.drawLine(
92 , 0, 96 , 0)

painter.rotate(
6.0 )

def resizeEvent(self, event):
side
= min(self.width(), self.height())

maskedRegion
= QtGui.QRegion(self.width() / 2 - side / 2 , self.height() / 2 - side / 2 , side, side, QtGui.QRegion.Ellipse)
self.setMask(maskedRegion)

def sizeHint(self):
return QtCore.QSize( 100 , 100 )

if __name__ == ' __main__ ' :
app
= QtGui.QApplication(sys.argv)
clock
= ShapedClock()
clock.show()
sys.exit(app.exec_())

转载于:https://www.cnblogs.com/eth0/archive/2011/07/07/2100055.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值