#python #pyqt #pyqt5
#python #pyqt #pyqt5
Вопрос:
Я попытался изменить шрифт QTableWidgetItem и завершить это.
Но в режиме редактирования не меняйте шрифт.
(PS. Я не должен указывать тот же стиль, поэтому я не использую таблицу стилей qss)
Приведенный ниже код, если ввести клавишу F1, увеличьте текущий размер шрифта ячейки.
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
class MainWindow(QMainWindow):
def __init__(self, **kwargs):
super().__init__()
self.init_main()
self.init_table()
self.resize(500,500)
self.show()
def init_main(self):
self.main_widget = QWidget()
self.main_layout = QHBoxLayout()
self.main_widget.setLayout(self.main_layout)
self.setCentralWidget(self.main_widget)
def init_table(self):
self.table = QTableWidget(5, 5, self)
self.table.resize(500, 500)
# init QTableWidgetItem in QTableWidget (5 x 5),
[[self.table.setItem(row, col,QTableWidgetItem("text")) for row in range(5)] for col in range(5)]
def keyPressEvent(self, e):
# If input F1, resize font-size in current item.
if e.key() == Qt.Key_F1:
cur = self.table.currentItem()
font = cur.font()
font.setPointSize(30)
cur.setFont(font)
if __name__ == "__main__":
app = QCoreApplication.instance()
if app is None:
app = QApplication(sys.argv)
window = MainWindow()
app.exec_()
Ответ №1:
Установка шрифта для элемента просто изменяет шрифт для этого элемента, а не для его редактора.
Что вам нужно сделать, это создать делегат элемента (который является объектом, который отвечает за отображение элементов и обеспечивает взаимодействие с базовой моделью, включая соответствующий редактор).
Поскольку установка шрифта для QTableWidgetItem равна установке Qt.FontRole
индекса, вы можете легко получить к нему доступ из createEditor()
функции, вызвать базовую реализацию, чтобы получить редактор, который будет возвращен, и применить к нему шрифт, если установлен шрифт.
class FontDelegate(QStyledItemDelegate):
def createEditor(self, parent, opt, index):
editor = super().createEditor(parent, opt, index)
font = index.data(Qt.FontRole)
if font is not None:
editor.setFont(font)
return editor
class MainWindow(QMainWindow):
# ...
def init_table(self):
self.table = QTableWidget(5, 5)
self.main_layout.addWidget(self.table)
[[self.table.setItem(row, col, QTableWidgetItem("text")) for row in range(5)] for col in range(5)]
self.table.setItemDelegate(FontDelegate(self.table))
# ...
Несвязанное примечание: таблица должна быть добавлена в макет (как я сделал в приведенном выше коде), а не просто создана как дочерний элемент главного окна.
Комментарии:
1. Спасибо, это работает. но не в реальном времени… как это решить ..?
2. Что вы подразумеваете под «но не в реальном времени»?
3. Это значит… не сразу. (сри, я не знаю английского)
4. Пожалуйста, найдите способ объяснить себя.
5. Чтобы увидеть результат, я меняю текущую ячейку. Я думаю, причина в том, что я использовал «таблицу. setEditTriggers(QTableWidget. currentChanged)»