PyQt实现图片中心旋转
# -*- 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实现图片中心旋转的更多相关文章
- [golang]按图片中心旋转后的新图左顶点和原图左顶点的偏移量计算
1 前言 略,作为记录使用 2 代码 /** * @Author: FB * @Description: * @File: RotateSample.go * @Version: 1.0.0 * @D ...
- C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字
这篇文章是 GDI+ 总结系列的第三篇,如果对 GDI+ 的基础使用不熟悉的朋友可以先看第一篇文章<C# 使用 GDI+ 画图>. 需求 需求是要实现给图片添加任意角度旋转的文字,文字的旋 ...
- [golang]svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量
1 前言 svg图片默认按照左上角旋转,改为按中心旋转,重新计算中心偏移量 2 代码 type Point struct { X float64 Y float64 } func GetOffsetX ...
- [golang]图片按中心旋转后,新图的左顶点位置的偏移量
1 前言 图片按中心旋转后,新图的左顶点位置的偏移量 2 代码 func OffsetXYAfterRotationCore(W, H, L, T, Angle float64) (x, y floa ...
- View以自身中心旋转的代码解惑
matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); 经常在中心旋转的应用中看到这段代码. ...
- android 围绕中心旋转动画
本文主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果 ...
- iOS 图片裁剪 + 旋转
iOS 图片裁剪 + 旋转 之前分别介绍了图片裁剪和图片旋转方法 <iOS 图片裁剪方法> 地址:http://www.cnblogs.com/silence-cnblogs/p/6490 ...
- 【Go语言绘图】图片的旋转
在上一篇中,我们了解了gg库的基本使用,包括调整大小.调整圆形参数.设置颜色.保存图片.加载图片和裁剪.这一篇我们来学习一下图片的旋转. 加载图片 首先,我们先来一张黄图. func TestRota ...
- css3相册图片3D旋转展示特效
查看效果:http://hovertree.com/texiao/css/14/ 本效果用css3的animation实现动画 定义和用法animation 属性是一个简写属性,用于设置六个动画属性: ...
随机推荐
- 【微信公众号】验证用户OpenID是否关注某个公众号
1.获取OpenID #region 获取微信支付的OpenId /// <summary> /// 获取微信支付的OpenId /// </summary> /// < ...
- Java正則表達式语法
Java正則表達式语法 字符 说明 \ 将下一字符标记为特殊字符.文本.反向引用或八进制转义符.比如,"n"匹配字符"n"."\n"匹配换行 ...
- ExtJS4.2学习(11)——高级组件之Grid
大纲: 1.首先,搭建起来一个最基础的Grid组件: 2.其次,利用前边MVC架构将代码重构: 3.再者,介绍下Grid的一些特性. 一.搭建基础的Grid组件 在文章的开始,我们首先简单的搭建一个G ...
- Mac下如何不借助第三方工具实现NTFS分区的可写挂载
问题背景 我想很多使用Mac的同学都会遇到读写NTFS磁盘的问题,因为默认情况下Mac OSX对NTFS磁盘的挂载方式是只读(read-only)的,因此把一个NTFS格式的磁盘插入到Mac上,是只能 ...
- WPF 获取屏幕分辨率(获取最大宽高)等
double x = SystemParameters.WorkArea.Width;//得到屏幕工作区域宽度 double y = SystemParameters.WorkArea.Height; ...
- 如何获取外网Ip呢, 终于找到方法了
临时更换网址:http://20140507.ip138.com/ic.asp 这个网址能同时获取ip和城市名字 上面的网址如何来的呢,其实很简单,随便打开一个获取Ip的网站,比如http://www ...
- 页面传值中get和post区别
get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应. post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到 ...
- Sql Server添加用户
1.sa用户登陆之后,在安全性中新建登录名 2.添加登录名,下面的默认数据库选择该用户可访问的默认数据库 3.服务器角色中选择public 4.用户映射中选择该用户可访问的数据库,数据库角色一般选择p ...
- C#字符串的比较
Console.WriteLine("输入字符1"); string n1 = Console.ReadLine(); Console.WriteLine("输入字符2& ...
- 通俗理解angularjs中的$apply,$digest,$watch
<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...