LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 928|回复: 2

touch it! [rubbish code](base examples from PyQt Doc.)

[复制链接]
发表于 2006-9-29 10:13:02 | 显示全部楼层 |阅读模式
[php]
#!/usr/bin/python
#Filename:helloA.py

from PyQt4 import QtCore,QtGui
import sys,random

class Main(QtGui.QWidget):
        def __init__(self):
                QtGui.QWidget.__init__(self)

                self.frame = QtGui.QFrame(self)
                self.frame.setGeometry(QtCore.QRect(0,0,640,480))
               
                self.forever = CircleWidget(self.frame)
                self.forever.setGeometry(100,100,175,175)
                self.timer = QtCore.QTimer(self)
                self.connect(self.timer,QtCore.SIGNAL("timeout()"),self.forever.nextAnimationFrame)
                self.forever.setVisible(False)
               
                random.seed()
                x = random.randint(0,1280)
                y = random.randint(0,800)
                self.setGeometry(QtCore.QRect(x,y,640,480))
       
        def mousePressEvent(self,event):
                if event.buttons() == QtCore.Qt.LeftButton:
                        x = event.x()
                        y = event.y()
                        print x,y
                        self.forever.setGeometry(x-125,y-75,250,155)
                        self.forever.setVisible(True)
                        self.timer.start(25)
                        self.forever.frameNo = 0
                       
                       
                        #timer = QtCore.QTimer(self)
                        #self.connect(timer,QtCore.SIGNAL("timeout()"),self.flash.nextAnimationFrame)
                        #timer.start(100)
               

class CircleWidget(QtGui.QWidget):
        def __init__(self, parent = None):
                QtGui.QWidget.__init__(self, parent)
               
                self.frameNo = 0
               
                self.setBackgroundRole(QtGui.QPalette.Base)
                self.setSizePolicy(QtGui.QSizePolicy.Expanding,
                                QtGui.QSizePolicy.Expanding)
       
        def minimumSizeHint(self):
                return QtCore.QSize(50, 50)
       
        def sizeHint(self):
                return QtCore.QSize(180, 180)
       
        def nextAnimationFrame(self):
                self.frameNo += 1
                self.update()
       
        def paintEvent(self, event):
                painter = QtGui.QPainter()
                painter.begin(self)
                painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
                painter.translate(self.width() / 2, self.height() / 2)
       
                for diameter in range(0, 256, 9):
                        delta = abs((self.frameNo % 128) - diameter / 2)
                        alpha = 255 - (delta * delta) / 4 - diameter
                        if alpha > 0:
                                painter.setPen(QtGui.QPen(QtGui.QColor(0, diameter / 2, 127, alpha), 3))
               
                                painter.drawEllipse(QtCore.QRectF(-diameter / 2.0, -diameter / 2.0,
                                                                        diameter, diameter))
       
                painter.end()



########################
#        main routine                #
########################
if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
       
        run = Main()
        run.show()
       
        app.exec_()
[/php]
 楼主| 发表于 2006-9-29 14:36:29 | 显示全部楼层
[php]

#!/usr/bin/python
#Filename:helloA.py

from PyQt4 import QtCore,QtGui
import sys,random

class Main(QtGui.QWidget):
        def __init__(self):
                QtGui.QWidget.__init__(self)

                self.frame = QtGui.QFrame(self)
                self.frame.setGeometry(QtCore.QRect(0,0,1280,800))
               
                newFont = self.frame.font()
                newFont.setPointSize(newFont.pointSize() + 65)
                self.frame.setFont(newFont)
                self.label = QtGui.QLabel('LeftButton RightButton',self.frame)
                self.label.setGeometry(15,15,1280,800)
               
                self.forever = CircleWidget(self.frame, longrun = False)
                self.forever.setGeometry(100,100,175,175)
                self.forever.setVisible(False)

                self.showFullScreen()
               
                self.setWindowTitle(self.tr("LEFT RIGHT MOUSE PRESS"))
       
        def mousePressEvent(self,event):
                global x,y
                x = event.x()
                y = event.y()
                if event.buttons() == QtCore.Qt.LeftButton:
                        self.forever.setGeometry(x-125,y-75,250,155)
                        self.forever.setVisible(True)
                        self.forever.frameNo = 0
                        self.forever.timer.start(1)
                if event.buttons() == QtCore.Qt.RightButton:
                        self.flash = CircleWidget(self.frame)
                        self.flash.setGeometry(x-12,y-125,25,250)
                        self.flash.show()


class CircleWidget(QtGui.QWidget):
        def __init__(self, parent = None,longrun = True):
                self.longrun = longrun
                QtGui.QWidget.__init__(self, parent)
               
                self.frameNo = 0
               
                self.update()
                self.timer = QtCore.QTimer(self)
                self.connect(self.timer,QtCore.SIGNAL("timeout()"),self.nextAnimationFrame)
                self.timer.start(15)
       
        def nextAnimationFrame(self):

                self.frameNo += 1
                self.update()
       
        def paintEvent(self, event):
                if self.longrun == False:
                        if self.frameNo == 128:
                                self.timer.stop()
                                self.setVisible(False)
                                return
                painter = QtGui.QPainter()
                painter.begin(self)
                painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
                painter.translate(self.width() / 2, self.height() / 2)
       
                for diameter in range(0, 256, 9):
                        delta = abs((self.frameNo % 128) - diameter / 2)
                        alpha = 255 - (delta * delta) / 4 - diameter
                        if alpha > 0:
                                painter.setPen(QtGui.QPen(QtGui.QColor(0, diameter / 2, 127, alpha), 3))
                                painter.drawEllipse(QtCore.QRectF(-diameter / 2, -diameter / 2,diameter, diameter))
                painter.end()



########################
#        main routine                #
########################
if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
       
        run = Main()
        run.show()
       
        app.exec_()
[/php]


UPDATE!!

python版 怎么不能上传 .py文件?!搞笑了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-29 14:47:45 | 显示全部楼层
update之后的问题:

左键点击完之后,再次点击要等待一段时间,而且鼠标事件会丢失……

请教改任何解决?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表