python和pyqt实现360的CLable控件

yipeiwu_com6年前Python基础

 

复制代码 代码如下:

 #!/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正则表达式的基础与捕获,那么在这一篇文章里,我将总结一下正则表达式的贪婪/非贪婪特性。  贪婪 默认情况下,正则表达式将进行贪婪匹配。所谓“贪婪”...

使用Python中的线程进行网络编程的入门教程

引言 对于 Python 来说,并不缺少并发选项,其标准库中包括了对线程、进程和异步 I/O 的支持。在许多情况下,通过创建诸如异步、线程和子进程之类的高层模块,Python 简化了各种...

Python设计模式之状态模式原理与用法详解

Python设计模式之状态模式原理与用法详解

本文实例讲述了Python设计模式之状态模式原理与用法。分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来...

python实现两个字典合并,两个list合并

1.两个字典:a={‘a':1,'b':2,'c':3} b= {‘aa':11,'bb':22,'cc':33} 合并1:dict(a,**b) 操作如下: >>>...

Python实现简单过滤文本段的方法

本文实例讲述了Python实现简单过滤文本段的方法。分享给大家供大家参考,具体如下: 一、问题: 如下文本: ## Alignment 0: score=397.0 e_value=...