Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当QTableView由模型驱动时,如何刷新它_Python_Qt_Pyqt_Pyside_Qtableview - Fatal编程技术网

Python 当QTableView由模型驱动时,如何刷新它

Python 当QTableView由模型驱动时,如何刷新它,python,qt,pyqt,pyside,qtableview,Python,Qt,Pyqt,Pyside,Qtableview,下面的代码创建了由self.myModel驱动的QTableView(QAbstractTableModel)。 “全部显示”self.checkBox链接到self.myModel.cbChanged()方法 问题:如何修改此代码,以便选中复选框后立即刷新“QTableView” 目标:选中复选框时,我们希望显示奇数项。以及要隐藏的偶数项。 当复选框关闭(未选中)时,我们希望显示偶数项。所有奇数编号的项目都将隐藏 import sys, os from PyQt4 import QtCore

下面的代码创建了由
self.myModel
驱动的
QTableView
QAbstractTableModel
)。 “全部显示”
self.checkBox
链接到
self.myModel.cbChanged()
方法

问题:如何修改此代码,以便选中复选框后立即刷新“QTableView”

目标:选中复选框时,我们希望显示奇数项。以及要隐藏的偶数项。 当复选框关闭(未选中)时,我们希望显示偶数项。所有奇数编号的项目都将隐藏

import sys, os
from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)

class TableModel(QtCore.QAbstractTableModel):
    def __init__(self):
        QtCore.QAbstractTableModel.__init__(self)      

        self.items=['One','Two','Three','Four','Five','Six','Seven']
        self.cb_status=True

    def rowCount(self, parent=QtCore.QModelIndex()):   
        return len(self.items)
    def columnCount(self, index=QtCore.QModelIndex()):
        return 1

    def data(self, index, role):
        if not index.isValid() or not (0<=index.row()<len(self.items)):
            return QtCore.QVariant()

        item=str(self.items[index.row()])

        if role==QtCore.Qt.DisplayRole and self.cb_status:
            return item
        else:
            return QtCore.QVariant()

    def cbChanged(self, arg=None):
        self.cb_status=arg  

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        mainLayout=QtGui.QHBoxLayout()
        self.setLayout(mainLayout)   

        self.viewA=QtGui.QTableView()
        self.viewA.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) 

        self.myModel=TableModel()
        self.viewA.setModel(self.myModel)

        self.checkBox=QtGui.QCheckBox("Show All")  
        self.checkBox.stateChanged.connect(self.myModel.cbChanged)
        self.checkBox.setChecked(self.myModel.cb_status)

        mainLayout.addWidget(self.viewA)
        mainLayout.addWidget(self.checkBox)  
        self.show()   

view=Window() 
sys.exit(app.exec_())
导入系统,操作系统 从PyQt4导入QtCore、QtGui app=QtGui.QApplication(sys.argv) 类TableModel(QtCore.QAbstractTableModel): 定义初始化(自): QtCore.QAbstractTableModel.\uuuu init\uuuu(self) self.items=['1','2','3','4','5','6','7'] self.cb_status=True def行数(self,parent=QtCore.QModelIndex()): 返回len(自我项目) def columnCount(self,index=QtCore.QModelIndex()): 返回1 def数据(自身、索引、角色):
如果不是index.isValid(),则(0为此,您可以使用
QSortFilterProxyModel
类。这样,我们就不会篡改实际源模型的结构或数据。我们只需将主源映射到该代理模型,视图使用该代理模型来显示过滤/排序的数据。我们可以随意影响代理模型中的数据,而不会有篡改的风险源模型

以下是修改后的源代码,以使用:

import sys, os
from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)

class TableModel(QtCore.QAbstractTableModel):
    def __init__(self):
        QtCore.QAbstractTableModel.__init__(self)
        self.items=['One','Two','Three','Four','Five','Six','Seven']

    def rowCount(self, parent=QtCore.QModelIndex()):   
        return len(self.items)
    def columnCount(self, index=QtCore.QModelIndex()):
        return 1

    def data(self, index, role):
        if not index.isValid() or not (0<=index.row()<len(self.items)):
            return QtCore.QVariant()

        item=str(self.items[index.row()])

        if role==QtCore.Qt.DisplayRole:
            return item
        else:
            return QtCore.QVariant()


class MySortFilterProxyModel(QtGui.QSortFilterProxyModel):
    def __init__(self):
        super(MySortFilterProxyModel, self).__init__()
        self.cb_status=True

    def cbChanged(self, arg=None):
        self.cb_status=arg
        print self.cb_status
        self.invalidateFilter()

    def filterAcceptsRow(self, sourceRow, sourceParent):
        print_when_odd_flag = self.cb_status
        is_odd = True
        index = self.sourceModel().index(sourceRow, 0, sourceParent)
        print "My Row Data: %s" % self.sourceModel().data(index, role=QtCore.Qt.DisplayRole)

        if (sourceRow + 1) % 2 == 0:
            is_odd = False

        if print_when_odd_flag:
            if is_odd:
                return True
            else:
                return False
        else:
            if not is_odd:
                return True
            else:
                return False


class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        mainLayout=QtGui.QHBoxLayout()
        self.setLayout(mainLayout)   

        self.viewA=QtGui.QTableView()
        self.viewA.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) 

        self.myModel=TableModel()

        self.sortModel = MySortFilterProxyModel()
        self.sortModel.setSourceModel(self.myModel)

        self.viewA.setModel(self.sortModel)

        self.checkBox=QtGui.QCheckBox("Show All")  
        self.checkBox.stateChanged.connect(self.sortModel.cbChanged)
        self.checkBox.setChecked(self.sortModel.cb_status)

        mainLayout.addWidget(self.viewA)
        mainLayout.addWidget(self.checkBox)  
        self.show()   

view=Window() 
sys.exit(app.exec_())
导入系统,操作系统 从PyQt4导入QtCore、QtGui app=QtGui.QApplication(sys.argv) 类TableModel(QtCore.QAbstractTableModel): 定义初始化(自): QtCore.QAbstractTableModel.\uuuu init\uuuu(self) self.items=['1','2','3','4','5','6','7'] def行数(self,parent=QtCore.QModelIndex()): 返回len(自我项目) def columnCount(self,index=QtCore.QModelIndex()): 返回1 def数据(自身、索引、角色):
如果不是index.isValid(),则(0为此,您可以使用
QSortFilterProxyModel
类。这样,我们就不会篡改实际源模型的结构或数据。我们只需将主源映射到该代理模型,视图使用该代理模型来显示过滤/排序的数据。我们可以随意影响代理模型中的数据,而不会有篡改的风险源模型

以下是修改后的源代码,以使用:

import sys, os
from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)

class TableModel(QtCore.QAbstractTableModel):
    def __init__(self):
        QtCore.QAbstractTableModel.__init__(self)
        self.items=['One','Two','Three','Four','Five','Six','Seven']

    def rowCount(self, parent=QtCore.QModelIndex()):   
        return len(self.items)
    def columnCount(self, index=QtCore.QModelIndex()):
        return 1

    def data(self, index, role):
        if not index.isValid() or not (0<=index.row()<len(self.items)):
            return QtCore.QVariant()

        item=str(self.items[index.row()])

        if role==QtCore.Qt.DisplayRole:
            return item
        else:
            return QtCore.QVariant()


class MySortFilterProxyModel(QtGui.QSortFilterProxyModel):
    def __init__(self):
        super(MySortFilterProxyModel, self).__init__()
        self.cb_status=True

    def cbChanged(self, arg=None):
        self.cb_status=arg
        print self.cb_status
        self.invalidateFilter()

    def filterAcceptsRow(self, sourceRow, sourceParent):
        print_when_odd_flag = self.cb_status
        is_odd = True
        index = self.sourceModel().index(sourceRow, 0, sourceParent)
        print "My Row Data: %s" % self.sourceModel().data(index, role=QtCore.Qt.DisplayRole)

        if (sourceRow + 1) % 2 == 0:
            is_odd = False

        if print_when_odd_flag:
            if is_odd:
                return True
            else:
                return False
        else:
            if not is_odd:
                return True
            else:
                return False


class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        mainLayout=QtGui.QHBoxLayout()
        self.setLayout(mainLayout)   

        self.viewA=QtGui.QTableView()
        self.viewA.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) 

        self.myModel=TableModel()

        self.sortModel = MySortFilterProxyModel()
        self.sortModel.setSourceModel(self.myModel)

        self.viewA.setModel(self.sortModel)

        self.checkBox=QtGui.QCheckBox("Show All")  
        self.checkBox.stateChanged.connect(self.sortModel.cbChanged)
        self.checkBox.setChecked(self.sortModel.cb_status)

        mainLayout.addWidget(self.viewA)
        mainLayout.addWidget(self.checkBox)  
        self.show()   

view=Window() 
sys.exit(app.exec_())
导入系统,操作系统 从PyQt4导入QtCore、QtGui app=QtGui.QApplication(sys.argv) 类TableModel(QtCore.QAbstractTableModel): 定义初始化(自): QtCore.QAbstractTableModel.\uuuu init\uuuu(self) self.items=['1','2','3','4','5','6','7'] def行数(self,parent=QtCore.QModelIndex()): 返回len(自我项目) def columnCount(self,index=QtCore.QModelIndex()): 返回1 def数据(自身、索引、角色):
如果不是index.isValid()或不是(0在一种情况下设置空模型,在另一种情况下设置带数据的模型?视图将自动更新。发布示例请签名一个空的“虚拟”模型可能会在使用复选框打开和关闭项目的情况下工作。但是,如果我们想使用复选框在奇数和偶数项目编号之间切换,空模型方法不会起作用……我同意我必须更具体地说明需要实现什么。但是回到主题。我们应该如何处理siTunes当我们想显示带有复选框的奇数项目时,复选框处于打开状态,而带有复选框的偶数项目处于关闭状态时(未选中)?在一种情况下设置空模型,在另一种情况下设置带有数据的模型?视图将自动更新。发布示例请签名空“虚拟”模型可能会在使用复选框打开和关闭项目的情况下工作。但是,如果我们想使用复选框在奇数和偶数项目编号之间切换,空模型方法不会起作用……我同意我必须更具体地说明需要实现什么。但是回到主题。我们应该如何处理s当我们想要显示带有复选框的奇数项目时,iTunes处于启用状态,而当复选框处于禁用状态时,显示偶数项目时,iTunes处于禁用状态(未选中)?感谢澄清!感谢澄清!