博客
关于我
python 导航栏
阅读量:359 次
发布时间:2019-03-04

本文共 4095 字,大约阅读时间需要 13 分钟。

# -*- coding: utf-8 -*-##-------------------------------------------------------------------------------# Name:         导航条控件#-------------------------------------------------------------------------------import sysfrom PyQt4.QtGui import *from PyQt4.QtCore import *class NavigationWidget(QWidget):    currentItemChanged = pyqtSignal([int, str])    def __init__(self, parent=None):        super(NavigationWidget, self).__init__(parent)        self.initUI()    def initUI(self):        self.backgroundColor = '#E4E4E4'        self.selectedColor = '#2CA7F8'        self.rowHeight = 40        self.currentIndex = 0 #当前选择的项索引        self.listItems = []        self.cursorIndex = -1 #当前光标所在位置的项索引        self.setMouseTracking(True)        self.setMinimumWidth(120)    def addItem(self, item):        self.listItems.append(item)        self.update()    def setItems(self, items):        self.listItems = items        self.update()    def setBackgroundColor(self, color):        self.backgroundColor = color        self.update()    def setSelectColor(self, color):        self.selectedColor = color        self.update()    def setRowHeight(self, height):        self.rowHeight = height        self.update()    def setCurrentIndex(self, idx):        self.currentIndex = idx        self.currentItemChanged.emit(idx, self.listItems[idx])        self.update()    def paintEvent(self, evt):        painter = QPainter(self)        painter.setRenderHint(QPainter.Antialiasing, True)        #画背景色        painter.setPen(Qt.NoPen)        painter.setBrush(QColor(self.backgroundColor))        painter.drawRect(self.rect())        #画子项        for i in range(len(self.listItems)):            itemPath = QPainterPath()            itemPath.addRect(QRectF(0, i*self.rowHeight, self.width()-1, self.rowHeight-1))            if i == self.currentIndex:                painter.setPen(QColor('#FFFFFF'))                painter.fillPath(itemPath, QColor(self.selectedColor))            elif i == self.cursorIndex:                painter.setPen(QColor('#FFFFFF'))                painter.fillPath(itemPath, QColor(self.selectedColor))            else:                painter.setPen(QColor('#202020'))                painter.fillPath(itemPath, QColor(self.backgroundColor))            painter.drawText(QRect(0, i*self.rowHeight, self.width(), self.rowHeight), Qt.AlignVCenter|Qt.AlignHCenter, self.listItems[i])    def mouseMoveEvent(self, evt):        idx = evt.y() / self.rowHeight        if idx >= len(self.listItems):            idx = -1        if idx < len(self.listItems) and idx != self.cursorIndex:            self.update()            self.cursorIndex = idx    def mousePressEvent(self, evt):        idx = evt.y()/self.rowHeight        if  idx< len(self.listItems):            self.currentIndex = idx            self.currentItemChanged.emit(idx, self.listItems[idx])            self.update()    def leaveEvent(self, QEvent):        self.cursorIndex = -1        self.update()class MainWindow(QMainWindow):    def __init__(self):        super(MainWindow, self).__init__()        self.initUI()    def initUI(self):        self.resize(600, 400)        self.setWindowTitle(u'导航条控件')        mainWidget = QWidget()        self.setCentralWidget(mainWidget)        navigationWidget = NavigationWidget()        navigationWidget.setRowHeight(50)        navigationWidget.setItems([u'常规', u'高级', u'管理', u'其它', u'关于'])        self.tipsLabel = QLabel(u"请选择:")        mainLayout = QHBoxLayout(mainWidget)        mainLayout.setContentsMargins(0, 0, 0, 0)                mainLayout.setSpacing(10)        mainLayout.addWidget(navigationWidget, 1)        mainLayout.addWidget(self.tipsLabel, 3, Qt.AlignCenter)        navigationWidget.currentItemChanged[int, str].connect(self.slotCurrentItemChanged)        navigationWidget.setCurrentIndex(2)        self.show()    def slotCurrentItemChanged(self, index, content):        self.tipsLabel.setText(u"Current index and content:{} ---- {}".format(index, content))def main():    app = QApplication(sys.argv)    mainWnd = MainWindow()    sys.exit(app.exec_())if __name__ == '__main__':    main()

在这里插入图片描述

你可能感兴趣的文章
Navicat Premium 12 卸载和注册表的删除
查看>>
Navicat 导入sql文件
查看>>
navicat 添加外键1215错误
查看>>
navicat 系列软件一点击菜单栏就闪退
查看>>
navicat 自动关闭_干掉Navicat!MySQL官方客户端到底行不行?
查看>>
Navicat 设置时间默认值(当前最新时间)
查看>>
navicat 连接远程mysql
查看>>
navicat:2013-Lost connection to MySQL server at ‘reading initial communication packet解决方法
查看>>
Navicate for mysql 数据库设计-数据库分析
查看>>
Navicat下载和破解以及使用
查看>>
Navicat中怎样将SQLServer的表复制到MySql中
查看>>
navicat创建连接 2002-can‘t connect to server on localhost(10061)且mysql服务已启动问题
查看>>
Navicat可视化界面导入SQL文件生成数据库表
查看>>
Navicat向sqlserver中插入数据时提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
查看>>
Navicat因导入的sql文件中时间数据类型有参数而报错的原因(例:datetime(3))
查看>>
Navicat如何连接MySQL
查看>>
navicat导入.sql文件出错2006- MySQLserver has gone away
查看>>
Navicat导入海量Excel数据到数据库(简易介绍)
查看>>
Navicat工具Oracle数据库复制 or 备用、恢复功能(评论都在谈论需要教)
查看>>
Navicat工具中建立数据库索引
查看>>