【问题标题】:PySide + QTableView examplePySide + QTableView 示例
【发布时间】:2023-03-07 06:27:03
【问题描述】:

谁能给我指出一个 PySide 中 QTableView 的简单示例?

我找到了QTableView docs,但不幸的是他们没有给出示例,而且我对 PySide 很陌生,所以我什至不知道如何开始。 (我对Java Swing中的JTable非常熟悉,所以我知道如何使用表格模型。)

【问题讨论】:

  • 你也可以看看 PySide 的 Itemviews examples 虽然我发现它们有点过时了。但有些包含 QTableViews 和 QAbstractTableModels 的示例

标签: python pyside qtableview


【解决方案1】:

找到一个:

http://www.daniweb.com/software-development/python/code/447834/applying-pysides-qabstracttablemodel

''' ps_QAbstractTableModel_solvents.py
use PySide's QTableView and QAbstractTableModel for tabular data
sort columns by clicking on the header title
here applied to solvents commonly used in Chemistry
PySide is the official LGPL-licensed version of PyQT
tested with PySide112 and Python27/Python33 by vegaseat  15feb2013
'''
import operator
from PySide.QtCore import *
from PySide.QtGui import *
class MyWindow(QWidget):
    def __init__(self, data_list, header, *args):
        QWidget.__init__(self, *args)
        # setGeometry(x_pos, y_pos, width, height)
        self.setGeometry(300, 200, 570, 450)
        self.setWindowTitle("Click on column title to sort")
        table_model = MyTableModel(self, data_list, header)
        table_view = QTableView()
        table_view.setModel(table_model)
        # set font
        font = QFont("Courier New", 14)
        table_view.setFont(font)
        # set column width to fit contents (set font first!)
        table_view.resizeColumnsToContents()
        # enable sorting
        table_view.setSortingEnabled(True)
        layout = QVBoxLayout(self)
        layout.addWidget(table_view)
        self.setLayout(layout)
class MyTableModel(QAbstractTableModel):
    def __init__(self, parent, mylist, header, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.mylist = mylist
        self.header = header
    def rowCount(self, parent):
        return len(self.mylist)
    def columnCount(self, parent):
        return len(self.mylist[0])
    def data(self, index, role):
        if not index.isValid():
            return None
        elif role != Qt.DisplayRole:
            return None
        return self.mylist[index.row()][index.column()]
    def headerData(self, col, orientation, role):
        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
            return self.header[col]
        return None
    def sort(self, col, order):
        """sort table by given column number col"""
        self.emit(SIGNAL("layoutAboutToBeChanged()"))
        self.mylist = sorted(self.mylist,
            key=operator.itemgetter(col))
        if order == Qt.DescendingOrder:
            self.mylist.reverse()
        self.emit(SIGNAL("layoutChanged()"))
# the solvent data ...
header = ['Solvent Name', ' BP (deg C)', ' MP (deg C)', ' Density (g/ml)']
# use numbers for numeric data to sort properly
data_list = [
('ACETIC ACID', 117.9, 16.7, 1.049),
('ACETIC ANHYDRIDE', 140.1, -73.1, 1.087),
('ACETONE', 56.3, -94.7, 0.791),
('ACETONITRILE', 81.6, -43.8, 0.786),
('ANISOLE', 154.2, -37.0, 0.995),
('BENZYL ALCOHOL', 205.4, -15.3, 1.045),
('BENZYL BENZOATE', 323.5, 19.4, 1.112),
('BUTYL ALCOHOL NORMAL', 117.7, -88.6, 0.81),
('BUTYL ALCOHOL SEC', 99.6, -114.7, 0.805),
('BUTYL ALCOHOL TERTIARY', 82.2, 25.5, 0.786),
('CHLOROBENZENE', 131.7, -45.6, 1.111),
('CYCLOHEXANE', 80.7, 6.6, 0.779),
('CYCLOHEXANOL', 161.1, 25.1, 0.971),
('CYCLOHEXANONE', 155.2, -47.0, 0.947),
('DICHLOROETHANE 1 2', 83.5, -35.7, 1.246),
('DICHLOROMETHANE', 39.8, -95.1, 1.325),
('DIETHYL ETHER', 34.5, -116.2, 0.715),
('DIMETHYLACETAMIDE', 166.1, -20.0, 0.937),
('DIMETHYLFORMAMIDE', 153.3, -60.4, 0.944),
('DIMETHYLSULFOXIDE', 189.4, 18.5, 1.102),
('DIOXANE 1 4', 101.3, 11.8, 1.034),
('DIPHENYL ETHER', 258.3, 26.9, 1.066),
('ETHYL ACETATE', 77.1, -83.9, 0.902),
('ETHYL ALCOHOL', 78.3, -114.1, 0.789),
('ETHYL DIGLYME', 188.2, -45.0, 0.906),
('ETHYLENE CARBONATE', 248.3, 36.4, 1.321),
('ETHYLENE GLYCOL', 197.3, -13.2, 1.114),
('FORMIC ACID', 100.6, 8.3, 1.22),
('HEPTANE', 98.4, -90.6, 0.684),
('HEXAMETHYL PHOSPHORAMIDE', 233.2, 7.2, 1.027),
('HEXANE', 68.7, -95.3, 0.659),
('ISO OCTANE', 99.2, -107.4, 0.692),
('ISOPROPYL ACETATE', 88.6, -73.4, 0.872),
('ISOPROPYL ALCOHOL', 82.3, -88.0, 0.785),
('METHYL ALCOHOL', 64.7, -97.7, 0.791),
('METHYL ETHYLKETONE', 79.6, -86.7, 0.805),
('METHYL ISOBUTYL KETONE', 116.5, -84.0, 0.798),
('METHYL T-BUTYL ETHER', 55.5, -10.0, 0.74),
('METHYLPYRROLIDINONE N', 203.2, -23.5, 1.027),
('MORPHOLINE', 128.9, -3.1, 1.0),
('NITROBENZENE', 210.8, 5.7, 1.208),
('NITROMETHANE', 101.2, -28.5, 1.131),
('PENTANE', 36.1, ' -129.7', 0.626),
('PHENOL', 181.8, 40.9, 1.066),
('PROPANENITRILE', 97.1, -92.8, 0.782),
('PROPIONIC ACID', 141.1, -20.7, 0.993),
('PROPIONITRILE', 97.4, -92.8, 0.782),
('PROPYLENE GLYCOL', 187.6, -60.1, 1.04),
('PYRIDINE', 115.4, -41.6, 0.978),
('SULFOLANE', 287.3, 28.5, 1.262),
('TETRAHYDROFURAN', 66.2, -108.5, 0.887),
('TOLUENE', 110.6, -94.9, 0.867),
('TRIETHYL PHOSPHATE', 215.4, -56.4, 1.072),
('TRIETHYLAMINE', 89.5, -114.7, 0.726),
('TRIFLUOROACETIC ACID', 71.8, -15.3, 1.489),
('WATER', 100.0, 0.0, 1.0),
('XYLENES', 139.1, -47.8, 0.86)
]
app = QApplication([])
win = MyWindow(data_list, header)
win.show()
app.exec_()

【讨论】:

    【解决方案2】:

    这里是 Pyside2 示例代码

    @Jason S 的相同示例。我进行了更改以使用 PySide2 在 Python3 中运行

    import operator
    from PySide2 import QtWidgets
    from PySide2 import QtGui
    from PySide2 import QtCore
    
    
    class MyWindow(QtWidgets.QWidget):
        def __init__(self, data_list, header, *args):
            QtWidgets.QWidget.__init__(self, *args)
            # setGeometry(x_pos, y_pos, width, height)
            self.setGeometry(300, 200, 570, 450)
            self.setWindowTitle("Click on column title to sort")
            table_model = MyTableModel(self, data_list, header)
            table_view = QtWidgets.QTableView()
            table_view.setModel(table_model)
            # set font
            font = QtGui.QFont("Courier New", 14)
            table_view.setFont(font)
            # set column width to fit contents (set font first!)
            table_view.resizeColumnsToContents()
            # enable sorting
            table_view.setSortingEnabled(True)
            layout = QtWidgets.QVBoxLayout(self)
            layout.addWidget(table_view)
            self.setLayout(layout)
    
    
    class MyTableModel(QtCore.QAbstractTableModel):
        def __init__(self, parent, mylist, header, *args):
            QtCore.QAbstractTableModel.__init__(self, parent, *args)
            self.mylist = mylist
            self.header = header
    
        def rowCount(self, parent):
            return len(self.mylist)
    
        def columnCount(self, parent):
            return len(self.mylist[0])
    
        def data(self, index, role):
            if not index.isValid():
                return None
            elif role != QtCore.Qt.DisplayRole:
                return None
            return self.mylist[index.row()][index.column()]
    
        def headerData(self, col, orientation, role):
            if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
                return self.header[col]
            return None
    
        def sort(self, col, order):
            """sort table by given column number col"""
            self.emit(QtCore.SIGNAL("layoutAboutToBeChanged()"))
            self.mylist = sorted(self.mylist,
                                 key=operator.itemgetter(col))
            if order == QtCore.Qt.DescendingOrder:
                self.mylist.reverse()
            self.emit(QtCore.SIGNAL("layoutChanged()"))
    
    
    # the solvent data ...
    header = ['Solvent Name', ' BP (deg C)', ' MP (deg C)', ' Density (g/ml)']
    # use numbers for numeric data to sort properly
    data_list = [
        ('ACETIC ACID', 117.9, 16.7, 1.049),
        ('ACETIC ANHYDRIDE', 140.1, -73.1, 1.087),
        ('ACETONE', 56.3, -94.7, 0.791),
        ('ACETONITRILE', 81.6, -43.8, 0.786),
        ('ANISOLE', 154.2, -37.0, 0.995),
        ('BENZYL ALCOHOL', 205.4, -15.3, 1.045),
        ('BENZYL BENZOATE', 323.5, 19.4, 1.112),
        ('BUTYL ALCOHOL NORMAL', 117.7, -88.6, 0.81),
        ('BUTYL ALCOHOL SEC', 99.6, -114.7, 0.805),
        ('BUTYL ALCOHOL TERTIARY', 82.2, 25.5, 0.786),
        ('CHLOROBENZENE', 131.7, -45.6, 1.111),
        ('CYCLOHEXANE', 80.7, 6.6, 0.779),
        ('CYCLOHEXANOL', 161.1, 25.1, 0.971),
        ('CYCLOHEXANONE', 155.2, -47.0, 0.947),
        ('DICHLOROETHANE 1 2', 83.5, -35.7, 1.246),
        ('DICHLOROMETHANE', 39.8, -95.1, 1.325),
        ('DIETHYL ETHER', 34.5, -116.2, 0.715),
        ('DIMETHYLACETAMIDE', 166.1, -20.0, 0.937),
        ('DIMETHYLFORMAMIDE', 153.3, -60.4, 0.944),
        ('DIMETHYLSULFOXIDE', 189.4, 18.5, 1.102),
        ('DIOXANE 1 4', 101.3, 11.8, 1.034),
        ('DIPHENYL ETHER', 258.3, 26.9, 1.066),
        ('ETHYL ACETATE', 77.1, -83.9, 0.902),
        ('ETHYL ALCOHOL', 78.3, -114.1, 0.789),
        ('ETHYL DIGLYME', 188.2, -45.0, 0.906),
        ('ETHYLENE CARBONATE', 248.3, 36.4, 1.321),
        ('ETHYLENE GLYCOL', 197.3, -13.2, 1.114),
        ('FORMIC ACID', 100.6, 8.3, 1.22),
        ('HEPTANE', 98.4, -90.6, 0.684),
        ('HEXAMETHYL PHOSPHORAMIDE', 233.2, 7.2, 1.027),
        ('HEXANE', 68.7, -95.3, 0.659),
        ('ISO OCTANE', 99.2, -107.4, 0.692),
        ('ISOPROPYL ACETATE', 88.6, -73.4, 0.872),
        ('ISOPROPYL ALCOHOL', 82.3, -88.0, 0.785),
        ('METHYL ALCOHOL', 64.7, -97.7, 0.791),
        ('METHYL ETHYLKETONE', 79.6, -86.7, 0.805),
        ('METHYL ISOBUTYL KETONE', 116.5, -84.0, 0.798),
        ('METHYL T-BUTYL ETHER', 55.5, -10.0, 0.74),
        ('METHYLPYRROLIDINONE N', 203.2, -23.5, 1.027),
        ('MORPHOLINE', 128.9, -3.1, 1.0),
        ('NITROBENZENE', 210.8, 5.7, 1.208),
        ('NITROMETHANE', 101.2, -28.5, 1.131),
        ('PENTANE', 36.1, ' -129.7', 0.626),
        ('PHENOL', 181.8, 40.9, 1.066),
        ('PROPANENITRILE', 97.1, -92.8, 0.782),
        ('PROPIONIC ACID', 141.1, -20.7, 0.993),
        ('PROPIONITRILE', 97.4, -92.8, 0.782),
        ('PROPYLENE GLYCOL', 187.6, -60.1, 1.04),
        ('PYRIDINE', 115.4, -41.6, 0.978),
        ('SULFOLANE', 287.3, 28.5, 1.262),
        ('TETRAHYDROFURAN', 66.2, -108.5, 0.887),
        ('TOLUENE', 110.6, -94.9, 0.867),
        ('TRIETHYL PHOSPHATE', 215.4, -56.4, 1.072),
        ('TRIETHYLAMINE', 89.5, -114.7, 0.726),
        ('TRIFLUOROACETIC ACID', 71.8, -15.3, 1.489),
        ('WATER', 100.0, 0.0, 1.0),
        ('XYLENES', 139.1, -47.8, 0.86)
    ]
    app = QtWidgets.QApplication([])
    win = MyWindow(data_list, header)
    win.show()
    app.exec_()
    

    【讨论】:

    • 这看起来与我几年前发布的代码相同。你是从哪里弄来的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多