
python 导航栏
发布日期:2021-05-07 21:44:32
浏览次数:13
分类:技术文章
本文共 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()
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月05日 17时58分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Mac操作数据库Mysql知识点备忘录
2019-03-05
Python实现理解树,树的遍历,二分查找
2019-03-05
Python3.6爬虫记录
2019-03-05
还不懂MySQL索引?这1次彻底搞懂B+树和B-树
2019-03-05
搞清楚Spring Cloud架构原理的这4个点,轻松应对面试
2019-03-05
1月份2月份GitHub上最热门的23个Java开源项目
2019-03-05
maven安装
2019-03-05
2020第十五届全国大学生智能汽车竞赛——4X4矩阵键盘+Flash调参系统
2019-03-05
最长无重复子串
2019-03-05
合并两个有序数组
2019-03-05
C++学习笔记3--程序内存分配方式
2019-03-05
Ubuntu 环境下使用中文输入法
2019-03-05
小白学习Vue(?)--model选项的使用(自定义组件文本框双向绑定)
2019-03-05
聊聊我的五一小假期
2019-03-05
面向对象之异常处理:多路捕获
2019-03-05
Python简易五子棋
2019-03-05
MySQL8.0.19 JDBC下载与使用
2019-03-05
Windows安装MongoDB 4.2.8
2019-03-05
Vue新建项目——页面初始化
2019-03-05
Cent OS 7.6 服务器软件安装(这篇博客主要是为了方便我配置云主机的)
2019-03-05