2014-03-25 42 views
2

我希望從上到下(即垂直)在QTableView顯示文本中製作水平標題單元格,我該怎麼做?它顯示一個QTableView中與在正常方向的水平頭表示文本在QTableView中,如何使水平標題單元格顯示垂直文本?

例PyQt5應用程式:

from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 
from PyQt5.QtCore import * 
import sys 

class TableModel(QAbstractTableModel): 
    def __init__(self, parent): 
     super(TableModel, self).__init__(parent) 

    def headerData(self, section, orientation, role): 
     if orientation != Qt.Horizontal: 
      return 
     if role != Qt.DisplayRole: 
      return 

     return 'Header Data' 

    def data(self, index, role): 
     if role != Qt.DisplayRole: 
      return 

     return 'Row Data' 

    def rowCount(self, parent): 
     return 1 

    def columnCount(self, parent): 
     return 1 


class Window(QMainWindow): 
    def __init__(self): 
     super(Window, self).__init__() 

     main_widget = QWidget(self) 
     self.setCentralWidget(main_widget) 
     layout = QVBoxLayout(main_widget) 

     view = QTableView(main_widget) 
     view.horizontalHeader().setVisible(True) 
     view.verticalHeader().setVisible(False) 
     layout.addWidget(view) 
     model = TableModel(view) 
     view.setModel(model) 
     view.resizeColumnsToContents() 

app = QApplication(sys.argv) 
window = Window() 
window.show() 
app.exec_() 

回答

1

簡單的解決方法是插入各字符之間換行符在標題單元的文本(參見模型的headerData方法):

from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 
from PyQt5.QtCore import * 
import sys 

class TableModel(QAbstractTableModel): 
    def __init__(self, parent): 
     super(TableModel, self).__init__(parent) 

    def headerData(self, section, orientation, role): 
     if orientation != Qt.Horizontal: 
      return 
     if role != Qt.DisplayRole: 
      return 

     # Make text appear flowing downwards 
     return '\n'.join([x for x in 'Header Data']).replace(' ', '') 

    def data(self, index, role): 
     if role != Qt.DisplayRole: 
      return 

     return 'Row Data' 

    def rowCount(self, parent): 
     return 1 

    def columnCount(self, parent): 
     return 1 


class Window(QMainWindow): 
    def __init__(self): 
     super(Window, self).__init__() 

     main_widget = QWidget(self) 
     self.setCentralWidget(main_widget) 
     layout = QVBoxLayout(main_widget) 

     view = QTableView(main_widget) 
     view.horizontalHeader().setVisible(True) 
     view.verticalHeader().setVisible(False) 
     layout.addWidget(view) 
     model = TableModel(view) 
     view.setModel(model) 
     view.resizeColumnsToContents() 

app = QApplication(sys.argv) 
window = Window() 
window.show() 
app.exec_() 
相關問題