2011-10-08 37 views
2

在Pyqt中,我試圖讓QTableWidget的QHeaderView響應右鍵單擊。 我有子類QHeaderView,我已經重載了mousePressEvent。如何在PyQt中設置QHeaderView的標籤?

然後我就可以將其設置爲我的自定義QTableWidget的,DataTable類的標題。不過,我不明白如何設置標題的標籤。

感謝您的幫助!

這是一些代碼。

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): 
     ??? 

回答

2

此示例代碼應該是有用的:

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() 
0

簡短的回答:

QTableWidget的有一個名爲 「setHorizo​​ntalHeaderLabels」 功能,只需提供你的頭吧。像這樣:

your_table_widget.setHorizontalHeaderLabels(["name", "phone number", "email"]) 

我會添加這個作爲pedrotech的評論,但我沒有足夠的代表評論。