2011-10-08 5 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은 단순히 당신의 헤더를 제공 "setHorizontalHeaderLabels"라는 함수를 가지고 있습니다. 그래서 같이 :

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

나는 pedrotech에 주석으로이를 추가 한 것입니다,하지만 난 의견에 대한 충분한 담당자가 없습니다.