首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PyQt中设置QHeaderView的标签?

如何在PyQt中设置QHeaderView的标签?
EN

Stack Overflow用户
提问于 2011-10-08 21:41:15
回答 2查看 7.6K关注 0票数 2

在Pyqt中,我试图让QTableWidget的QHeaderView响应鼠标右键点击。我创建了QHeaderView的子类,并且重载了mousePressEvent。

然后我可以将它设置为我的自定义QTableWidget,即DataTable类的标头。但是,我不知道如何设置标题的标签。

感谢您的帮助!

下面是一些代码。

代码语言:javascript
复制
class Header( QtGui.QHeaderView ):
    def __init__ ( self, parent ):
        QtGui.QHeaderView.__init__( self, QtCore.Qt.Vertical, parent=parent )

    def mousePressEvent( self, event ):
        if event.button() == QtCore.Qt.RightButton:
            do_stuff()


class DataTable( QtGui.QTableWidget ):
    def __init__ ( self ):
        QtGui.QTableWidget.__init__( self )
        self.setShowGrid(True)

        self.header = Header( parent = self )
        self.header.setClickable(True)
        self.setHorizontalHeader( self.header )

    def set_header( self, labels ):
        ???
EN

回答 2

Stack Overflow用户

发布于 2011-10-08 23:29:16

下面的示例代码应该很有用:

代码语言:javascript
复制
import sys
import string
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Header(QHeaderView):
    def __init__(self, parent=None):
        super(Header, self).__init__(Qt.Horizontal, parent)

        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.ctxMenu)
        self.hello = QAction("Hello", self)
        self.hello.triggered.connect(self.printHello)
        self.currentSection = None

    def printHello(self):
        data = self.model().headerData(self.currentSection, Qt.Horizontal)
        print data.toString()

    def ctxMenu(self, point):
        menu = QMenu(self)
        self.currentSection = self.logicalIndexAt(point)
        menu.addAction(self.hello)
        menu.exec_(self.mapToGlobal(point))


class Table(QTableWidget):
    def __init__(self, parent=None):
        super(Table, self).__init__(parent)
        self.setHorizontalHeader(Header(self))
        self.setColumnCount(3)
        self.setHorizontalHeaderLabels(['id', 'name', 'username'])
        self.populate()

    def populate(self):
        self.setRowCount(10)
        for i in range(10):
            for j,l in enumerate(string.letters[:3]):
                self.setItem(i, j, QTableWidgetItem(l)) 

if __name__ == '__main__':
    app = QApplication(sys.argv)
    t = Table()
    t.show()
    app.exec_()
    sys.exit()
票数 3
EN

Stack Overflow用户

发布于 2018-01-10 16:57:40

简短的回答:

QTableWidget有一个名为"setHorizontalHeaderLabels“的函数,只需向它提供您的头文件。如下所示:

代码语言:javascript
复制
your_table_widget.setHorizontalHeaderLabels(["name", "phone number", "email"])

我本想将此作为评论添加到pedrotech中,但我没有足够的代表来发表评论。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7697194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档