【问题标题】:How to make a QListView resize its items according to editor size如何使 QListView 根据编辑器大小调整其项目的大小
【发布时间】:2011-01-12 23:19:25
【问题描述】:

我有一个 qlistview,其编辑是通过委托在 qtableview 中进行的。当 qtableview 出现时,我希望 qlistview 调整其行的大小以适合所有 qtableview。代码如下:

import sys
from PyQt4 import QtGui, QtCore

class MyDelegate(QtGui.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        mtview = QtGui.QTableView(parent)
        mtview.verticalHeader().setVisible(False)
        mtview.horizontalHeader().setVisible(False)
        mtmodel = QtGui.QStandardItemModel()
        mtview.setModel(mtmodel)
        return mtview
    def setEditorData(self, editor, modelindex):
        editor.parent().setMinimumSize(400,400)
        mtmodel = editor.model()
        for x in range(5):
            for y in range(5):
                mtmodel.setItem(x,y,QtGui.QStandardItem("%s, %s" % (x, y)))

class MyApp(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.resize(200, 200)
        self.listview = QtGui.QListView(self)
        self.listview.setGeometry(QtCore.QRect(0,0,200,200))
        self.listview.setItemDelegate(MyDelegate())
        listmodel = QtGui.QStandardItemModel()
        t = '123456789'
        for x in range(10):
            itemmodel=QtGui.QStandardItem(t)
            listmodel.appendRow(itemmodel)
        self.listview.setModel(listmodel)

def main():
    app = QtGui.QApplication(sys.argv)
    mw = MyApp()
    mw.show()
    app.exec_()

if __name__=="__main__":
    main()

【问题讨论】:

    标签: python qt pyqt qlistview


    【解决方案1】:

    您应该尝试调整大小的小部件是编辑器,也就是说

    import sys
    from PyQt4 import QtGui, QtCore
    
    class MyDelegate(QtGui.QStyledItemDelegate):
        def createEditor(self, parent, option, index):
            mtview = QtGui.QTableView(parent)
            mtview.verticalHeader().setVisible(False)
            mtview.horizontalHeader().setVisible(False)
            mtmodel = QtGui.QStandardItemModel()
            mtview.setModel(mtmodel)
            return mtview
    
        def setEditorData(self, editor, modelindex):
            editor.resize(400,400)
            mtmodel = editor.model()
            for x in range(5):
                for y in range(5):
                    mtmodel.setItem(x,y,QtGui.QStandardItem("%s, %s" % (x, y)))
    
    class MyApp(QtGui.QMainWindow):
        def __init__(self, parent=None):
            super(MyApp, self).__init__(parent)
            self.setMinimumSize(200, 200)
            self.listview = QtGui.QListView()
            self.listview.setItemDelegate(MyDelegate())
            listmodel = QtGui.QStandardItemModel()
    
            self.setCentralWidget(self.listview)
            t = '123456789'
            for x in range(10):
                itemmodel=QtGui.QStandardItem(t)
                listmodel.appendRow(itemmodel)
            self.listview.setModel(listmodel)
    
    def main():
        app = QtGui.QApplication(sys.argv)
        mw = MyApp()
        mw.show()
        app.exec_()
    
    if __name__=="__main__":
        main()
    

    另一件事是,使用 QMainWindow 你应该使用 setCentralWidget

    【讨论】:

    • 谢谢你,armonge,但我真正想要的调整 qlistview 行的大小。使用您的代码,编辑器跨越其他行,隐藏它们。还要感谢您的 setCentralWidget 提示。
    猜你喜欢
    • 2012-04-25
    • 2011-08-21
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2016-10-17
    • 2015-02-16
    相关资源
    最近更新 更多