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 流程控制实例代码
Sep 25 Python
python基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
python文件和目录操作函数小结
Jul 11 Python
python下10个简单实例代码
Nov 15 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 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
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
生成sessionid和随机密码的例子
2006/10/09 PHP
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
浅说js变量
2011/05/25 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
外贸销售员求职的自我评价
2013/11/23 职场文书
学生会主席演讲稿
2014/04/25 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
工作作风建设心得体会
2014/10/22 职场文书
2014年医务科工作总结
2014/12/18 职场文书
中层干部考核评语
2015/01/04 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python