亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何為 QTableView 列設置標題標簽?

如何為 QTableView 列設置標題標簽?

UYOU 2023-10-26 15:31:06
我正在使用 PyQt5 開發一個 Python GUI 應用程序,它有一個用于顯示數據的 QTableView。這是代碼:import sysfrom PyQt5 import QtWidgets, QtCorefrom PyQt5.QtCore import Qtclass DataModel(QtCore.QAbstractTableModel):    def __init__(self):        super().__init__()        self.data = []    def data(self, index, role):        if role == Qt.DisplayRole:            return self.data[index.row()][index.column()]    def rowCount(self, index):        return len(self.data)    def columnCount(self, index):        return len(self.data[0])class MainWindow(UI.UserInterface):    def __init__(self):        super().__init__()        self.model = DataModel()        self.load()        self.TableView.setModel(self.model)        self.TableView.resizeColumnsToContents()        self.TableView.horizontalHeader().setStretchLastSection(True)    def load(self):        try:            self.model.data = [(1, '2020-01-10 00:00:00', 'KANIA', 'HENRYK', 4219)]        except Exception:            passif __name__ == "__main__":    app = QtWidgets.QApplication(sys.argv)    window = MainWindow()    window.show()    app.exec_()該類UI.UserInterface位于單獨的模塊中。它具有QWidgets的界面和布局QWidgets。其中之一是QTableView。我似乎找不到一種方法來設置QTableView.我尋找了不同的解決方案(其中一些如下),但沒有一個有效:https://doc.qt.io/qt-5/sql-presenting.html(這個是C++寫的,不太懂)
查看完整描述

3 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

您必須實施headerData()


class DataModel(QtCore.QAbstractTableModel):

? ? # ...

? ? def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):

? ? ? ? if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:

? ? ? ? ? ? return 'Column {}'.format(section + 1)

? ? ? ? return super().headerData(section, orientation, role)

顯然,即使使用包含要顯示的標簽的簡單列表,您也可以設置自己的標簽。


請注意,為子類命名新屬性時應非常小心,因為它們可能已經存在。

最重要的是,您不應該覆蓋self.data.


查看完整回答
反對 回復 2023-10-26
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

這是一個使用 QtableView 和一組 headerdata 的示例,您將能夠修改 tableview 中的數據


def exemple_table(self):

? ? ? ? database = QSqlDatabase("QPSQL")

? ? ? ? database.setHostName("localhost")

? ? ? ? database.setDatabaseName("database")

? ? ? ? database.setUserName("postgres")

? ? ? ? database.setPassword("password")

? ? ? ? database.open()

? ? ? ??

? ? ? ? model_ft = QSqlTableModel(db=database)

? ? ? ? model_ft.setTable('table')

? ? ? ??

? ? ? ? model_ft.setHeaderData(0, Qt.Horizontal,"id")

? ? ? ? model_ft.setHeaderData(1, Qt.Horizontal,"exemple01")

? ? ? ? model_ft.setHeaderData(2, Qt.Horizontal,"exemple02")

? ? ? ? model_ft.setHeaderData(3, Qt.Horizontal,"exemple03")

? ? ? ? model_ft.setHeaderData(4, Qt.Horizontal,"exemple04")

? ? ? ? model_ft.setHeaderData(5, Qt.Horizontal,"exemple05")

? ? ? ? model_ft.setHeaderData(6, Qt.Horizontal,"exemple06")

? ? ? ? model_ft.setHeaderData(7, Qt.Horizontal,"exemple07")

? ? ? ??

? ? ? ? model_ft.removeColumns(8,1)

? ? ? ? date = str(datetime.date.today())

? ? ? ??

? ? ? ? self.tableView.setModel(model_ft)

? ? ? ? self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

? ? ? ??

? ? ? ? model_ft.setSort(0, Qt.DescendingOrder)

? ? ? ? model_ft.select()

? ? ? ? filter_ft = "date_d ='%s' " % (date_1)

? ? ? ? model_ft.setFilter(filter_ft)



查看完整回答
反對 回復 2023-10-26
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

設置列和行名稱的覆蓋headerData方法QTableAbstractModel


def headerData(self, section: int, orientation: PySide6.QtCore.Qt.Orientation, role: int = ...):

    #for setting columns name

    if orientation == Qt.Horizontal and role == Qt.DisplayRole:

        return f"Column {section + 1}"

    #for setting rows name

    if orientation == Qt.Vertical and role == Qt.DisplayRole:

        return f"Row {section + 1}"

工作代碼:

import sys

import requests


import PySide6

from PySide6.QtWidgets import QTableView, QWidget, QApplication, QGridLayout, QHeaderView

from PySide6.QtCore import Qt, QAbstractTableModel

from PySide6.QtGui import QColor, QIcon, QPixmap


from datetime import datetime



class MagicIcon():

    def __init__(self, link):

        self.link = link

        self.icon = QIcon()

        try:

            response = requests.get(self.link)

            pixmap = QPixmap()

            pixmap.loadFromData(response.content)

            self.icon = QIcon(pixmap)

        except:

            pass



class TableModel(QAbstractTableModel):


    def headerData(self, section: int, orientation: PySide6.QtCore.Qt.Orientation, role: int = ...):

        if orientation == Qt.Horizontal and role == Qt.DisplayRole:

            # return f"Column {section + 1}"

            return self.columns[section]

        if orientation == Qt.Vertical and role == Qt.DisplayRole:

            return f"{section + 1}"


    def __init__(self, _data):

        self.columns = ["Account", "Investment", "KYC", "Investment Date"]

        # super().__init__(self)

        super(TableModel, self).__init__()

        self._data = _data

        self.calendarLink = "https://img.icons8.com/fluency/48/000000/windows-calendar.png"

        self.dollarLink = "https://img.icons8.com/external-vitaliy-gorbachev-lineal-color-vitaly-gorbachev/40/000000/external-dollar-currency-vitaliy-gorbachev-lineal-color-vitaly-gorbachev-1.png"

        self.analysis = "https://img.icons8.com/external-flatarticons-blue-flatarticons/65/000000/external-analysis-digital-marketing-flatarticons-blue-flatarticons-1.png"

        self.bug = "https://img.icons8.com/offices/30/000000/bug.png"

        self.account = "https://img.icons8.com/plumpy/24/000000/edit-administrator.png"

        self.approvedLink = "https://img.icons8.com/external-bearicons-flat-bearicons/40/000000/external-approved-approved-and-rejected-bearicons-flat-bearicons-9.png"

        self.rejectedLink = "https://img.icons8.com/external-bearicons-flat-bearicons/40/000000/external-rejected-approved-and-rejected-bearicons-flat-bearicons-11.png"

        self.naLink = "https://img.icons8.com/color/48/000000/not-applicable.png"


        self.calendarIcon = MagicIcon(self.calendarLink).icon

        self.accountIcon = MagicIcon(self.account).icon

        self.dollarIcon = MagicIcon(self.dollarLink).icon

        self.approvedIcon = MagicIcon(self.approvedLink).icon

        self.rejectedIcon = MagicIcon(self.rejectedLink).icon

        self.naIcon = MagicIcon(self.naLink).icon


    def data(self, index, role):

        if role == Qt.DisplayRole:

            value = self._data[index.row()][index.column()]

            if isinstance(value, datetime):

                return value.strftime("%Y-%m-%d")

            if isinstance(value, float):

                return f"{value:.2f}"

            return value

        if role == Qt.TextAlignmentRole:

            return Qt.AlignHCenter + Qt.AlignVCenter


        if role == Qt.BackgroundRole:

            return QColor("#adcdff") if index.row() % 2 == 0 else QColor("#d8ffc2")


        if role == Qt.DecorationRole:

            value = self._data[index.row()][index.column()]

            

            if value is None:

                return self.naIcon

            if isinstance(value, datetime):

                return self.calendarIcon

            if index.column() == 0:

                return self.accountIcon

            if index.column() == 1:

                return self.dollarIcon

            if index.column() == 2:

                if value == True:

                    return self.approvedIcon

                elif value == False:

                    return self.rejectedIcon

                return self.naIcon


    def rowCount(self, index):

        return len(self._data)


    def columnCount(self, index):

        return len(self._data[0])



class MainWindow(QWidget):

    def __init__(self):

        # super().__init__()

        super(MainWindow, self).__init__()

        self.resizeEvent = self.onResize

        self.table = QTableView()

        

        self.setWindowIcon(MagicIcon(

            "https://img.icons8.com/external-flatarticons-blue-flatarticons/65/000000/external-analysis-digital-marketing-flatarticons-blue-flatarticons-1.png"

        ).icon)


        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        # self.table.setSizeAdjustPolicy(QHeaderView.AdjustIgnored)

        # self.table.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)

        data = [

            ["Andrew Mike", 15.255, True, datetime(2022, 1, 5)],

            ["Eliza Petterson", 353.555, False, datetime(2020, 1, 5)],

            ["Joseph Samuel", 123, None, datetime(2020, 1, 15)],

            ["Nita Singh", 266, True, datetime(2022, 2, 7)],

            ["Rahul Chakrabarti", 102, True, datetime(2019, 10, 15)],

        ]

        self.model = TableModel(data)

        self.table.setModel(self.model)

        self.header = self.table.horizontalHeader()

        # self.header.setSectionResizeMode(0, QHeaderView.Stretch)

        # self.header.setSectionResizeMode(1, QHeaderView.)

        # self.header.setSectionResizeMode(2, QHeaderView.ResizeToContents)

        self.layout = QGridLayout()

        self.layout.addWidget(self.table, 0, 0)

        self.setLayout(self.layout)


    def onResize(self, event):

        # print('old', event.oldSize(), 'new', event.size())

        # super(MainWindow, self).resizeEvent(event)

        pass



if __name__ == "__main__":

    app = QApplication(sys.argv)

    wid = MainWindow()

    wid.show()

    sys.exit(app.exec())

https://img1.sycdn.imooc.com/653a15fa000125f313650767.jpg

查看完整回答
反對 回復 2023-10-26
  • 3 回答
  • 0 關注
  • 412 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號