История изменений
Исправление Deleted, (текущая версия) :
На основе примеров из Интернета написал вот такой код.
#!/usr/bin/python3
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from time import time
import sys
my_array = [['Общая лексика','класс (the top of the class - первый ученик (в классе))','разряд','группа','категория (class of problems - круг вопросов)'],
['','вид','род','сорт','качество'],
['','отличие','курс (to take classes (in) - проходить курс обучения (где-либо))','группа','отряд'],
['Генетика','класс (Набор характеристик, задающих общие свойства окон, принадлежащих данному классу)','','','']]
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
tablemodel = MyTableModel(my_array, self)
tableview = QTableView()
tableview.setModel(tablemodel)
tableview.verticalHeader().setVisible(False)
tableview.horizontalHeader().setVisible(False)
#tableview.setRowCount(4) - not supported
#tableview.setColumnCount(5) - not supported
tableview.setSpan(3,1,1,4)
tableview.verticalHeader().setSectionResizeMode(0,QHeaderView.ResizeToContents)
tableview.verticalHeader().setSectionResizeMode(1,QHeaderView.ResizeToContents)
tableview.verticalHeader().setSectionResizeMode(2,QHeaderView.ResizeToContents)
tableview.verticalHeader().setSectionResizeMode(3,QHeaderView.ResizeToContents)
tableview.setShowGrid(False)
label = QLabel()
label.setText("<span style='font-size:12pt;color:navy;'>'Общая лексика'</span>")
label.setWordWrap(True)
#label.setFont(cell_font)
label.setAlignment(Qt.AlignLeft|Qt.AlignTop)
my_array[0] = label
layout = QVBoxLayout(self)
layout.addWidget(tableview)
self.setLayout(layout)
class MyTableModel(QAbstractTableModel):
def __init__(self, datain, parent=None, *args):
QAbstractTableModel.__init__(self, parent, *args)
self.arraydata = datain
def rowCount(self, parent):
#return len(self.arraydata)
return 4
def columnCount(self, parent):
#return len(self.arraydata[0])
return 5
def data(self, index, role):
if not index.isValid():
return QVariant()
elif role != Qt.DisplayRole:
return QVariant()
try:
return QVariant(self.arraydata[index.row()][index.column()])
except:
return QVariant()
if __name__ == '__main__':
start_time = time()
app = QApplication(sys.argv)
w = MyWindow()
w.show()
w.setWindowTitle('<Article Title>')
w.resize(1024,768)
end_time = time()
print('Завершено за %s с.' % (str(end_time - start_time)))
sys.exit(app.exec_())
1) Как использовать QLabel в QTableView? Почему не вставляется QLabel в коде выше?
2) Почему после объединения ячеек по вертикали остается много пустого места (см. скрин)?
3) Можно ли в QTableView наследовать методы из QTableWidget?
Исходная версия Deleted, :
На основе примеров из Интернета написал вот такой код.
#!/usr/bin/python3
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from time import time
import sys
my_array = [['Общая лексика','класс (the top of the class - первый ученик (в классе))','разряд','группа','категория (class of problems - круг вопросов)'],
['','вид','род','сорт','качество'],
['','отличие','курс (to take classes (in) - проходить курс обучения (где-либо))','группа','отряд'],
['Генетика','класс (Набор характеристик, задающих общие свойства окон, принадлежащих данному классу)','','','']]
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
tablemodel = MyTableModel(my_array, self)
tableview = QTableView()
tableview.setModel(tablemodel)
tableview.verticalHeader().setVisible(False)
tableview.horizontalHeader().setVisible(False)
#tableview.setRowCount(4) - not supported
#tableview.setColumnCount(5) - not supported
tableview.setSpan(3,1,1,4)
tableview.verticalHeader().setSectionResizeMode(0,QHeaderView.ResizeToContents)
tableview.verticalHeader().setSectionResizeMode(1,QHeaderView.ResizeToContents)
tableview.verticalHeader().setSectionResizeMode(2,QHeaderView.ResizeToContents)
tableview.verticalHeader().setSectionResizeMode(3,QHeaderView.ResizeToContents)
tableview.setShowGrid(False)
'''
label = QLabel()
label.setText("<span style='font-size:12pt;color:navy;'>%s</span><span style='font-size:12pt;'>%s</span><span style='font-size:10pt;color:gray;'>%s</span>" % ('Общая лексика','',''))
label.setWordWrap(True)
#label.setFont(cell_font)
label.setAlignment(Qt.AlignLeft|Qt.AlignTop)
my_array[0] = label
'''
layout = QVBoxLayout(self)
layout.addWidget(tableview)
self.setLayout(layout)
class MyTableModel(QAbstractTableModel):
def __init__(self, datain, parent=None, *args):
QAbstractTableModel.__init__(self, parent, *args)
self.arraydata = datain
def rowCount(self, parent):
#return len(self.arraydata)
return 4
def columnCount(self, parent):
#return len(self.arraydata[0])
return 5
def data(self, index, role):
if not index.isValid():
return QVariant()
elif role != Qt.DisplayRole:
return QVariant()
try:
return QVariant(self.arraydata[index.row()][index.column()])
except:
return QVariant()
if __name__ == '__main__':
start_time = time()
app = QApplication(sys.argv)
w = MyWindow()
w.show()
w.setWindowTitle('<Article Title>')
w.resize(1024,768)
end_time = time()
print('Завершено за %s с.' % (str(end_time - start_time)))
sys.exit(app.exec_())
1) Как использовать QLabel в QTableView? Если раскомментировать код выше, пишет, что label не индексируется. Как его вставить?
2) Почему после объединения ячеек по вертикали остается много пустого места (см. скрин)?
3) Можно ли в QTableView наследовать методы из QTableWidget?