LINUX.ORG.RU

История изменений

Исправление 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_())
Руководства и форумы по QT5 я подчитал, но, в целом, еще полный нуб. По моделям плохо понимаю, мозги пухнут. Подскажите, пожалуйста:

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_())
Руководства и форумы по QT5 я подчитал, но, в целом, еще полный нуб. По моделям плохо понимаю, мозги пухнут. Подскажите, пожалуйста:

1) Как использовать QLabel в QTableView? Если раскомментировать код выше, пишет, что label не индексируется. Как его вставить?

2) Почему после объединения ячеек по вертикали остается много пустого места (см. скрин)?

3) Можно ли в QTableView наследовать методы из QTableWidget?