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_())

时间: 2024-08-08 17:46:56

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

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

matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); 经常在中心旋转的应用中看到这段代码. preTranslate是指在matrix旋转之前平移,postTranslate是指在matrix旋转之后平移 注意他们参数是平移的距离,而不是平移目的地的坐标! 由于旋转是以原点(0,0)为中心的,所以为了把界面的中心移至(0,0)对齐,就要preTranslate(-centerX, -cen

android 围绕中心旋转动画

本文主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果:第二类是 Frame 动画,即顺序播放事先做好的图像,跟电影类似.本文分析 Tween动画的rotate实现旋转效果. 在新浪微博客户端中各个操作进行中时activity的右上角都会有个不停旋转的图标,类似刷新的效果,给用户以操作中的提示.这种非模态的提示方式推荐使用,那么下面就分享下如何实现这种

canvas绘制柱状图和、绘制形状中心旋转

<!DOCTYPE html> <html ng-app=""> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <canvas id="cvs" width="400" height="300"

java图片验证码包括文字和图片的旋转

java图片验证码包括文字图片的旋转: 此例子演示的是两位数的加减运算,需要的可以通过自己的修改获得更多的方式: 或者我上传的资源中也有其他的两种方式供选择:http://download.csdn.net/detail/huitoukest/8043711 package com.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; im

android 从相册中选择图片并判断图片是否旋转

今天在做图片合成时,首先从相册中选择图片,然后判断该图片是否旋转了,今天就讲下图片是否旋转,直接上代码 /** * 读取照片exif信息中的旋转角度 * * @param path * 照片路径 * @return角度 获取从相册中选中图片的角度 */ public static int readPictureDegree(String path) { if (TextUtils.isEmpty(path)) { return 0; } int degree = 0; try { ExifInt

CSS3实现图片循环旋转

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>图片循环旋转</title> <style> .ta_c{text-align: center; margin-top: 100px;} @-webkit-keyframes rotation{ from {-webkit-transform: rotate(0deg);} to

windows phone 摄像头得到图片是旋转90&#176;

我上个随笔讲到,windows phone 拍出来的photo如果直接使用是反转了90°的. 研究了很久..终于发现问题.其实..这是使用习惯问题... CameraCaptureUI 得到的photo 其实是 以第2图水平的方向为基准的.为什么我会这样说呢..让我们看一下用模拟器拍摄的photo.注意到左边那些字没有. 再给一个水平的,可以看的更清楚.YUY2(640x480) 说白了..其实水平才是别人老外认为的默认视角..但是有人说..这样子..竖着拍的时候就拿到的却会横着显示..很奇怪.

asp.net(C#)利用QRCode生成二维码(续)-在二维码图片中心加Logo或图像 .

<%@ WebHandler Language="C#" Class="GetQRCode" %> using System; using System.Web; using ThoughtWorks.QRCode.Codec; using ThoughtWorks.QRCode.Codec.Data; using ThoughtWorks.QRCode.Codec.Util; using System.IO; using System.Text; us

让图片任意旋转

前几天做了一个让图片旋转任意角度的功能,今天跟大家分享一下.. 1.首先把力图片加载进来. //strPagePath为图片的路径 System.Drawing.Image ImgPointer = null; if (File.Exists(strPagePath)) ImgPointer = System.Drawing.Image.FromFile(strPagePath);//加载图片 2.设置图片显示的坐标 //设置坐标和显示图片框的大小(我这里图片框大小为图片大小) Rectangl