# -*- coding: cp936 -*-

from PyQt4 import QtCore, QtGui, Qt

class RotatePage(QtGui.QFrame):

def __init__(self, img, x_pos, y_pos, direction = 1, speed = 30, step = 10):

super(RotatePage, self).__init__()

self.img = img  #图片

self.x_pos = x_pos  #x坐标

self.y_pos = y_pos  #y坐标

self.direction = direction  #转向

self.speed = speed  #转速

self.step = 10  #步长

self.rotate = 0  #角度

self.timer = QtCore.QBasicTimer()  #定时器

self.timer.start(30, self)

def play(self):

#播放

self.timer.start(self.speed, self)

def stop(self):

#停止

self.timer.stop()

def setDirection(self, arg):

#设置转向

if arg <= 0:

self.step = - abs(self.step)

else:

self.step = abs(self.step)

self.timer.start(self.speed, self)

def setSpeed(self, speed):

#设置转速

self.speed = speed

self.timer.start(speed, self)

def setStep(self, arg):

#设置步长

self.step = arg

def paintEvent(self, event):

painter = Qt.QPainter(self)

pix = QtGui.QPixmap(self.img)

painter.translate(self.x_pos / 2, self.y_pos / 2)   #使图片的中心作为旋转的中心

painter.rotate(self.rotate)   #顺时针旋转10°

painter.translate(-self.x_pos / 2, -self.y_pos / 2) #将原点复位

painter.drawPixmap(0, 0, self.x_pos, self.y_pos, pix)

def timerEvent(self, event):

if event.timerId() == self.timer.timerId():

self.rotate += self.step

if self.rotate > 360:

self.rotate = 0

self.update()

else:

super(RotatePage, self).timerEvent(event)

if __name__ == '__main__':

import sys

app = QtGui.QApplication(sys.argv)

frm = RotatePage("icon.png", 100, 100)

frm.show()

sys.exit(app.exec_())

PyQt实现图片中心旋转的更多相关文章

  1. [golang]按图片中心旋转后的新图左顶点和原图左顶点的偏移量计算

    1 前言 略,作为记录使用 2 代码 /** * @Author: FB * @Description: * @File: RotateSample.go * @Version: 1.0.0 * @D ...

  2. C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字

    这篇文章是 GDI+ 总结系列的第三篇,如果对 GDI+ 的基础使用不熟悉的朋友可以先看第一篇文章<C# 使用 GDI+ 画图>. 需求 需求是要实现给图片添加任意角度旋转的文字,文字的旋 ...

  3. [golang]svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量

    1 前言 svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量 2 代码 type Point struct { X float64 Y float64 } func GetOffsetX ...

  4. [golang]图片按中心旋转后,新图的左顶点位置的偏移量

    1 前言 图片按中心旋转后,新图的左顶点位置的偏移量 2 代码 func OffsetXYAfterRotationCore(W, H, L, T, Angle float64) (x, y floa ...

  5. View以自身中心旋转的代码解惑

    matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); 经常在中心旋转的应用中看到这段代码. ...

  6. android 围绕中心旋转动画

    本文主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果 ...

  7. iOS 图片裁剪 + 旋转

    iOS 图片裁剪 + 旋转 之前分别介绍了图片裁剪和图片旋转方法 <iOS 图片裁剪方法> 地址:http://www.cnblogs.com/silence-cnblogs/p/6490 ...

  8. 【Go语言绘图】图片的旋转

    在上一篇中,我们了解了gg库的基本使用,包括调整大小.调整圆形参数.设置颜色.保存图片.加载图片和裁剪.这一篇我们来学习一下图片的旋转. 加载图片 首先,我们先来一张黄图. func TestRota ...

  9. css3相册图片3D旋转展示特效

    查看效果:http://hovertree.com/texiao/css/14/ 本效果用css3的animation实现动画 定义和用法animation 属性是一个简写属性,用于设置六个动画属性: ...

随机推荐

  1. 【C#基础】实现URL Unicode编码,编码、解码相关整理

    1.Unicode编码 引用系统 System.Web using System.Web; string postdata = "SAMLRequest=" + HttpUtili ...

  2. JAVA 将接口的引用指向实现类的对象

    有一个很简单的例子,java.util中的类ArrayList实现了接口List则生成ArrayList对象时可用以下语句. List list=new ArrayList(); 也就是说所有实现了接 ...

  3. javascript--瀑布流

    简单瀑布流代码实现 html代码例如以下 <!DOCTYPE html> <html> <head> <meta http-equiv="Conte ...

  4. UVA10534-----Wavio Sequence-----动态规划之LIS

    题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. FoxOne---一个快速高效的BS框架

    FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...

  6. 从Ueditor跨域上传,总结的一次跨域上传的爬坑经历

    项目内其中一个管理后台需要发布文章,需要一个富文本编辑器,经过一番选择后,最终选择了百度的Ueditor. 由于上传的文件是上传到另一台专门存放图片等静态资源的服务器上面的,所以就涉及到了跨域上传. ...

  7. Android-操作栏之图标导航

    想实现图标向上导航功能,步子分两步走: 1.样式上要改变-->图标要变成可点击的按钮,并有一个向左的箭头. 2.功能上要实现-->实现向上导航 首先谈第一步: 对于拥有fragment的a ...

  8. uva 280 - Vertex

    #include <iostream> #include <cstdio> using namespace std; #include <vector> #defi ...

  9. 深入剖析C/C++函数的参数传递机制

    2014-07-29 20:16 深入剖析C/C++函数的参数传递机制    C语言的函数入口参数,可以使用值传递和指针传递方式,C++又多了引用(reference)传递方式.引用传递方式在使用上类 ...

  10. JQuery 判断ie7|| ie8

    if( $.browser.msie && ( $.browser.version == '7.0' || $.browser.version == '8.0'|| $.browser ...