pyqt QSortFilterProxyModel学(网友提供)

#!/usr/bin/env python

#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui

class myWindow(QtGui.QMainWindow):

def __init__(self, parent=None):

super(myWindow, self).__init__(parent)

self.centralwidget  = QtGui.QWidget(self)

self.lineEdit       = QtGui.QLineEdit(self.centralwidget)

self.view           = QtGui.QTableView(self.centralwidget)

self.comboBox       = QtGui.QComboBox(self.centralwidget)

self.label          = QtGui.QLabel(self.centralwidget)

self.gridLayout = QtGui.QGridLayout(self.centralwidget)

self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1)

self.gridLayout.addWidget(self.view, 1, 0, 1, 3)

self.gridLayout.addWidget(self.comboBox, 0, 2, 1, 1)

self.gridLayout.addWidget(self.label, 0, 0, 1, 1)

self.setCentralWidget(self.centralwidget)

self.label.setText("Regex Filter")

self.model = QtGui.QStandardItemModel(self)

for rowName in range(3) * 5:

self.model.invisibleRootItem().appendRow(

[   QtGui.QStandardItem("row {0} col {1}".format(rowName, column))

for column in range(3)

]

)

self.proxy = QtGui.QSortFilterProxyModel(self)

self.proxy.setSourceModel(self.model)

self.view.setModel(self.proxy)

self.comboBox.addItems(["Column {0}".format(x) for x in range(self.model.columnCount())])

self.lineEdit.textChanged.connect(self.on_lineEdit_textChanged)

self.comboBox.currentIndexChanged.connect(self.on_comboBox_currentIndexChanged)

self.horizontalHeader = self.view.horizontalHeader()

self.horizontalHeader.sectionClicked.connect(self.on_view_horizontalHeader_sectionClicked)

@QtCore.pyqtSlot(int)

def on_view_horizontalHeader_sectionClicked(self, logicalIndex):

self.logicalIndex   = logicalIndex

self.menuValues     = QtGui.QMenu(self)

self.signalMapper   = QtCore.QSignalMapper(self)

self.comboBox.blockSignals(True)

self.comboBox.setCurrentIndex(self.logicalIndex)

self.comboBox.blockSignals(True)

valuesUnique = [    self.model.item(row, self.logicalIndex).text()

for row in range(self.model.rowCount())

]

actionAll = QtGui.QAction("All", self)

actionAll.triggered.connect(self.on_actionAll_triggered)

self.menuValues.addAction(actionAll)

self.menuValues.addSeparator()

for actionNumber, actionName in enumerate(sorted(list(set(valuesUnique)))):

action = QtGui.QAction(actionName, self)

self.signalMapper.setMapping(action, actionNumber)

action.triggered.connect(self.signalMapper.map)

self.menuValues.addAction(action)

self.signalMapper.mapped.connect(self.on_signalMapper_mapped)

headerPos = self.view.mapToGlobal(self.horizontalHeader.pos())

posY = headerPos.y() + self.horizontalHeader.height()

posX = headerPos.x() + self.horizontalHeader.sectionPosition(self.logicalIndex)

self.menuValues.exec_(QtCore.QPoint(posX, posY))

@QtCore.pyqtSlot()

def on_actionAll_triggered(self):

filterColumn = self.logicalIndex

filterString = QtCore.QRegExp(  "",

QtCore.Qt.CaseInsensitive,

QtCore.QRegExp.RegExp

)

self.proxy.setFilterRegExp(filterString)

self.proxy.setFilterKeyColumn(filterColumn)

@QtCore.pyqtSlot(int)

def on_signalMapper_mapped(self, i):

stringAction = self.signalMapper.mapping(i).text()

filterColumn = self.logicalIndex

filterString = QtCore.QRegExp(  stringAction,

QtCore.Qt.CaseSensitive,

QtCore.QRegExp.FixedString

)

self.proxy.setFilterRegExp(filterString)

self.proxy.setFilterKeyColumn(filterColumn)

@QtCore.pyqtSlot(str)

def on_lineEdit_textChanged(self, text):

search = QtCore.QRegExp(    text,

QtCore.Qt.CaseInsensitive,

QtCore.QRegExp.RegExp

)

self.proxy.setFilterRegExp(search)

@QtCore.pyqtSlot(int)

def on_comboBox_currentIndexChanged(self, index):

self.proxy.setFilterKeyColumn(index)

if __name__ == "__main__":

import sys

app  = QtGui.QApplication(sys.argv)

main = myWindow()

main.show()

main.resize(400, 600)

sys.exit(app.exec_())

如图:

时间: 2024-12-30 14:22:07

pyqt QSortFilterProxyModel学(网友提供)的相关文章

爆众多网友提供微软Windows7 ghost版系统下载

2月4日消息,微软Windows 10消费者预览版发布后,许多Windows 7用户都忍不住下载尝鲜,但部分用户升级前却可能并未备份Windows 7.针对这种情况,微软特地推出了一个Windows 7恢复网站,让用户能回到Windows 7.不过最新消息显示,该Windows 7恢复网站目前无法访问,而微软官方尚未对此作出回应. 这次,被爆众多网友纷纷提供ghost版的window 7系统下载,当然这个部分是微软授权,部分是自己内部修改的,网友提供的下载地址: 32位:http://www.x

pyqt之类listviw中查找内容(网友提供)

from PyQt4 import QtCore from PyQt4 import QtGui class SimpleListModel(QtCore.QAbstractListModel): def __init__(self, contents): super(SimpleListModel, self).__init__() self.contents = contents def rowCount(self, parent): return len(self.contents) de

pyqt tableViewBug(网友提供)

#!/usr/bin/env python # -*- coding: utf8 -*- # some imports : from __future__ import print_function import sys # display infos : PYTHONVERSION = sys.version_info[0] * 10 + sys.version_info[1] print('PYTHONVERSION :', PYTHONVERSION) # PyQt or PySide ?

pyqt动态创建一系列组件并绑定信号和槽(网友提供学习)

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #如上图要求:创建指定多个复选框,一种是通过QT设计器Designer,这种是在知情的情况下.另一种是通过配置文件读出来,或者从数据库中取出来,还有其他情况就需要动态创建 #思路是循环列表,创建对象,插入布局,进行信号槽绑定和处理信号,通过sender()方法来获取那个对象发出的信号 from PyQt4.Qt import * from PyQt4.QtCore 

pyqt 同时勾选多个items(网友提供学习)

框选多个item之后,用空格键可以勾选/去选多个item,效果如下图所示: http://oglop.gitbooks.io/pyqt-pyside-cookbook/list/img/checkbox_multi_toggle.gif # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.Qt import * from PyQt4.QtCore import * from PyQt4.QtGu

pyqt学习之设置字体,字号等格式属性(网友提供)

# -*- coding: utf-8 -*- from PyQt4.QtGui import * from PyQt4.QtCore import * import sys QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) class MainWindow(QMainWindow): def __init__(self,parent=None): super(MainWindow,self).__init__(pare

pyqt学习之列表管理器(网友提供)

# -*- coding: utf-8 -*- __author__ = 'Administrator' import sys from PyQt4.QtCore import * from PyQt4.QtGui import * MAC = "qt_mac_set_native_menubar" in dir() class StringListDlg(QDialog): def __init__(self, name, stringlist=None, parent=None):

pyqt学习之到点提醒程序(网友提供)

import sys import time from PyQt4.QtCore import * from PyQt4.QtGui import * #aside1 app = QApplication(sys.argv) #aside2 try: due = QTime.currentTime() message = "Alert!" if len(sys.argv) < 2: raise ValueError hours, mins = sys.argv[1].split(

pyqt增删例子(官方提供)

############################################################################# ## ## Copyright (C) 2010 Hans-Peter Jansen <[email protected]>. ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ## All rights reserved. ## ## This fil