python实现360的字符显示界面


Posted in Python onFebruary 21, 2014
#!/usr/bin/python  
#-*-coding:utf-8-*-
from push_button import *
from clabel import *
from common import *
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.Qt import *

class CharacterWidget(QWidget):
 def __init__(self,parent = None):
  super(CharacterWidget,self).__init__()
  self.mouse_press = False
  self.mouse_move = False
  self.current_index = 0 #当前图片下标
  self.current_pos_x = 0
  #self.name_list = QStringList()
  self.m_mouseSrcPos = QPoint()
  self.m_mouseDstPos = QPoint()
  self.label_move = False
  self.label_array = [CLabel(),CLabel(),CLabel(),CLabel()] #存储图片的数组 
  self.resize(QSize(WINDOW_WIDTH, WINDOW_HEIGHT))
  self.setWindowFlags(Qt.FramelessWindowHint)
  self.background_label =  QLabel(self) #背景图片
  self.background_label.setPixmap(QPixmap("./img/Character/bg_bottom.png"))
  self.background_label.setGeometry(QRect(0, 0, self.width(), self.height()))
  #将4张图片合成一张
  self.pixmap = QPixmap(QSize(self.width()*WINDOW_PAGE_COUNT, WINDOW_HEIGHT)) #
  painter  = QPainter(self.pixmap)
  for i  in range(WINDOW_PAGE_COUNT):
   painter.drawImage(QRect(WINDOW_WIDTH*i, 0, WINDOW_WIDTH, WINDOW_HEIGHT),\
    QImage(QString("./img/Character/desktop_%1").arg(i)))
  self.total_label =  QLabel(self) #图片(结合体)
  self.total_label.resize(self.pixmap.size())
  self.total_label.setPixmap(self.pixmap)
  self.total_label.move(WINDOW_START_X, WINDOW_START_Y)
  self.close_button =  PushButton(self)  #关闭按钮
  self.translateLanguage()
  for i in range(WINDOW_BUTTON_COUNT):
   self.label =  CLabel(self)
   self.label.resize(QSize(155, 45))
   self.label.setPixmap(QPixmap(QString("./img/Character/btn_%1").arg(i)))
   self.label.setText(self.name_list[i])
   self.label.move(8+i*170, 319)
   self.connect(self.label, SIGNAL("clicked()"), self, SLOT("changeCurrentPage(CLabel())"))
   self.label_array[i] = self.label
  self.label_array[0].setMousePressFlag(False)
  self.close_button.loadPixmap("./img/sysButton/close.png")
  self.close_button.move(self.width()-52, 0)
  self.connect(self.close_button, SIGNAL("clicked()"), self, SLOT("close()"))

 def translateLanguage(self):
  self.name_list= [u"function",u"clear cookie",u"triggerman",u"booster"]
  self.close_button.setToolTip(u"close")
 def mousePressEvent(self,event):
  if(event.button() == Qt.LeftButton):
   self.m_mouseSrcPos = event.pos()
   if(self.m_mouseSrcPos.y() <= 40):
    self.mouse_move = True
   else:
    self.current_pos_x = self.total_label.x()
    self.mouse_press = True
  elif(event.button() == Qt.RightButton):
   if(self.label_move):
    if(self.current_index > 0):
     self.current_index = self.current_index-1
     self.moveCurrentPage(False) #右移
 def mouseReleaseEvent(self,event):
  self.xpos = 0
  if (self.mouse_press):
   if (self.label_move):
    self.m_mouseDstPos = event.pos()
    self.xpos = self.m_mouseDstPos.x() - self.m_mouseSrcPos.x()
    if(self.xpos > 0):#右移
     if(self.xpos >= WINDOW_ONEBUTTON_WIDTH):
      if(self.current_index > 0):
       self.current_index = self.current_index-1
       self.moveCurrentPage(False) #右移
      else:
       self.moveCurrentPage(True) #左移
     else:
      self.moveCurrentPage(True) #左移
    else: #左移
     if(self.xpos <= -WINDOW_ONEBUTTON_WIDTH):
      if(self.current_index < WINDOW_PAGE_COUNT-1):
       self.current_index = self.current_index+1
       self.moveCurrentPage(True) #左移
      else:
       self.moveCurrentPage(False) #右移
     else:
      self.moveCurrentPage(False) #右移
    self.mouse_press = False
  elif(self.mouse_move):
   self.mouse_move = False
 def changeCurrentPage(label):
  for i in range(WINDOW_BUTTON_COUNT):
   if(label != self.label_array[i]):
    self.label_array[i].setMousePressFlag(False)
  #获取点击的图标下标
  index = 0
  for i  in range(WINDOW_PAGE_COUNT):
   if(label == self.label_array[i]):
    index = i
    return 
  #若下标小于当前下标右移,否则左移
  if(index < self.current_index):
   while(index != self.current_index):
    self.current_index = self.current_index-1
    self.moveCurrentPage(False)
  elif(index > self.current_index):
   while(index != self.current_index):
    self.current_index = self.current_index+1
    self.moveCurrentPage(True)
 def mouseMoveEvent(self,event):
  x = 10
  if(self.mouse_press):
   if(self.label_move):
    self.m_mouseDstPos = event.pos()
    x = self.m_mouseDstPos.x() - self.m_mouseSrcPos.x()
    self.setLabelMove(False)
    self.total_label.move(self.current_pos_x + x, WINDOW_START_Y)
    self.setLabelMove(True)
  elif(self.mouse_move):
   self.m_mouseDstPos = event.pos()
   self.move(event.pos() + self.m_mouseDstPos - self.m_mouseSrcPos) #注意debug

 def keyPressEvent(self, e):
  if(self.label_move):   
   if e.key() == Qt.Key_Left | e.key() == Qt.Key_Up:
    if(self.current_index > 0):
     self.current_index = self.current_index-1
     self.moveCurrentPage(False) #右移
    elif e.key() == Qt.Key_Down | e.key() == Qt.Key_Right:
     if(self.current_index < WINDOW_PAGE_COUNT-1):
      self.current_index = self.current_index + 1
      self.moveCurrentPage(True) #左移

 def moveCurrentPage(self,direction):
  #改变当前页面对应的按钮
  self.changeCurrentButton()
  #图片的几个分割点
  #0-680, 680-1360, 1360-2040, 2040-2720
  #真:向左移  假:向右移
  #左移的几种可能性,对于x坐标
  #index=0, 将label移动到-680*0
  #index=1, 将label移动到-680*1
  #index=2, 将label移动到-680*2
  #index=3, 将label移动到-680*3
  self.setLabelMove(False)
  self.current_pos_x = self.total_label.x() #当前label坐标
  self.dest_pos_x = -WINDOW_WIDTH * self.current_index #目标X坐标
  if(direction):
   if(self.current_pos_x > self.dest_pos_x):
    self.total_label.move(self.current_pos_x-WINDOW_PAGE_MOVE, WINDOW_START_Y)
    self.current_pos_x = self.total_label.x()
    qApp.processEvents(QEventLoop.AllEvents)
  else:
   if(self.current_pos_x < self.dest_pos_x):
    self.total_label.move(self.current_pos_x+WINDOW_PAGE_MOVE, WINDOW_START_Y)
    self.current_pos_x = self.total_label.x()
    qApp.processEvents(QEventLoop.AllEvents)
  self.total_label.move(self.dest_pos_x, WINDOW_START_Y)
  self.setLabelMove(True)
 def changeCurrentButton(self):
  for i in range(WINDOW_BUTTON_COUNT):
   if(i != self.current_index):
    self.label_array[i].setMousePressFlag(False)
   else:
    self.label_array[i].setMousePressFlag(True)
 def setLabelMove(self,enable):
  self.label_move = enable
if __name__ == '__main__':
 import sys
 app = QApplication(sys.argv)
 Character = CharacterWidget()
 Character.show()
 sys.exit(app.exec_())
Python 相关文章推荐
python用ConfigObj读写配置文件的实现代码
Mar 04 Python
python中enumerate函数用法实例分析
May 20 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
使用pandas实现csv/excel sheet互相转换的方法
Dec 10 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
Nov 05 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
pyqt5 QlistView列表显示的实现示例
Mar 24 Python
python实现梯度下降法
Mar 24 Python
django中related_name的用法说明
May 20 Python
python自动化发送邮件实例讲解
Jan 04 Python
Django框架之路由用法
Jun 10 Python
python和pyqt实现360的CLable控件
Feb 21 #Python
python使用7z解压软件备份文件脚本分享
Feb 21 #Python
python发布模块的步骤分享
Feb 21 #Python
python列表操作使用示例分享
Feb 21 #Python
使用python统计文件行数示例分享
Feb 21 #Python
python 多进程通信模块的简单实现
Feb 20 #Python
python使用rabbitmq实现网络爬虫示例
Feb 20 #Python
You might like
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
php写的AES加密解密类分享
2014/06/20 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
python 快速排序代码
2009/11/23 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
python re模块常见用法例举
2021/03/01 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
如何选择使用结构还是类
2014/05/30 面试题
人事档案接收函
2014/01/12 职场文书
回门宴答谢词
2014/01/13 职场文书
社区党总支书记先进事迹材料
2014/01/24 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
安卓程序员求职信
2014/02/28 职场文书
单位接收证明格式
2015/06/18 职场文书
MongoDB 常用的crud操作语句
2021/06/20 MongoDB
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang