python和pyqt实现360的CLable控件


Posted in Python onFebruary 21, 2014

 

 #!/usr/bin/python  
#-*-coding:utf-8-*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.Qt import *
class CLabel(QWidget):
 signalLabelPress = pyqtSignal()
 def __init__(self,parent = None):
  super(CLabel,self).__init__(parent)
  self.initVariable()
  self.initSetupUi()
  #self.m_mouseEnterFlag = False
  #self.m_mousePressFlag = True
  #pointer members
  #self.m_pLabelIcon = QLabel(self)
  #self.m_pLabelText = QLabel(self)
 def setPixmap(self,pixmap):
  self.m_pLabelIcon.setPixmap(pixmap.scaled(QSize(30, 30), Qt.KeepAspectRatio, Qt.SmoothTransformation))
 
 def setText(self,text):
  self.m_pLabelText.setText(text)
 
 def setMouseEnterFlag(self, flag):
  self.m_mouseEnterFlag = flag
  self.update()
 
 def setMousePressFlag(self, flag):
  self.m_mousePressFlag = flag
  self.update()
 
 def enterEvent(self,event):
  if(~self.getMousePressFlag()):
   self.setMouseEnterFlag(True)
  self.setCursor(Qt.PointingHandCursor)
 
 def leaveEvent(self,event):
  self.setMouseEnterFlag(False)
 
 def mousePressEvent(self,e): 
  if(e.button() == Qt.LeftButton):  
   self.setMousePressFlag(True)
   self.signalLabelPress.emit()
 
 def paintEvent(self,e): 
  painter = QPainter(self)
  if(self.getMouseEnterFlag()):  
   self.paintWidget(50, painter)  
  elif(self.getMousePressFlag()):  
   self.paintWidget(80, painter)  
  QWidget.paintEvent(self,e)
 
 def initVariable(self): 
  self.setMouseEnterFlag(False)
  self.setMousePressFlag(False)
 
 def initSetupUi(self): 
  self.createFrame()
  self.createWidget()
  self.createLayout()
 
 def createFrame(self): 
  self.setStyleSheet("QWidget background:transparentborder:0pxcolor:whitefont-weight:boldfont-size:16px")
 
 def createWidget(self): 
  self.m_pLabelIcon =  QLabel(self)
  self.m_pLabelText =  QLabel(self)
 
 def createLayout(self):
  self.m_pHLayout = QHBoxLayout()
  self.m_pHLayout.setSpacing(10)
  self.m_pHLayout.setContentsMargins(QMargins(5, 0, 5, 0))
  self.m_pHLayout.addWidget(self.m_pLabelIcon)
  self.m_pHLayout.addWidget(self.m_pLabelText)
  self.m_pHLayout.addStretch()
  self.setLayout(self.m_pHLayout)
 
 def paintWidget(self,transparency,device):  #QPainter *
  #self.pen = QPen(Qt.NoBrush)
  #self.pen.setWidth(1)
  device.setPen(Qt.NoPen)
  self.linear = QLinearGradient(QPointF(self.rect().topLeft()), QPointF(self.rect().bottomLeft()))
  self.linear.setColorAt(0, QColor(255, 255, 255, transparency))
  self.brush = QBrush(self.linear)
  device.setBrush(self.brush)
  device.drawRoundedRect(self.rect(), 2, 2)
 
 def getMouseEnterFlag(self): 
  return self.m_mouseEnterFlag
 
 def getMousePressFlag(self): 
  return self.m_mousePressFlag
 
 
if __name__ == '__main__':
 import sys
 app = QApplication(sys.argv)
 Label = CLabel()
 Label.show()
 sys.exit(app.exec_())
 
Python 相关文章推荐
使用python BeautifulSoup库抓取58手机维修信息
Nov 21 Python
简单说明Python中的装饰器的用法
Apr 24 Python
深入讲解Python中的迭代器和生成器
Oct 26 Python
Python复数属性和方法运算操作示例
Jul 21 Python
Django 生成登陆验证码代码分享
Dec 12 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
python创造虚拟环境方法总结
Mar 04 Python
Python3安装Pillow与PIL的方法
Apr 03 Python
python gensim使用word2vec词向量处理中文语料的方法
Jul 05 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
Python基于进程池实现多进程过程解析
Apr 30 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
python使用win32com在百度空间插入html元素示例
Feb 20 #Python
You might like
递归列出所有文件和目录
2006/10/09 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
php常用正则函数实例小结
2016/12/29 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
自己动手手写jQuery插件总结
2015/01/20 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
JSONP基础知识详解
2017/03/19 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
Python中的集合类型知识讲解
2015/08/19 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
python 实现删除文件或文件夹实例详解
2016/12/04 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
python map比for循环快在哪
2020/09/21 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
node中使用shell脚本的方法步骤
2021/03/23 Javascript
大学生实习思想汇报
2014/01/12 职场文书
4s店活动策划方案
2014/08/25 职场文书
高中运动会广播稿
2014/09/16 职场文书
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL