Python PyQt,Don';编辑期间,请不要更改qtablewidgetitem字体
我尝试更改QTableWidgetItem字体,并完成该操作 但是,在编辑模式下,不要更改字体 (注:我不应该给出相同的样式,所以我不使用qss样式表) 在下面的代码中,如果输入F1键,则增大当前单元格的字体大小Python PyQt,Don';编辑期间,请不要更改qtablewidgetitem字体,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我尝试更改QTableWidgetItem字体,并完成该操作 但是,在编辑模式下,不要更改字体 (注:我不应该给出相同的样式,所以我不使用qss样式表) 在下面的代码中,如果输入F1键,则增大当前单元格的字体大小 from PyQt5.QtWidgets import * from PyQt5.QtCore import * import sys class MainWindow(QMainWindow): def __init__(self, **kwargs):
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_()
在项目上设置字体只会更改该项目的字体,而不会更改其编辑器的字体 您需要做的是创建一个item委托(它是一个负责显示项并提供与底层模型(包括适当的编辑器)交互的对象) 由于在QTableWidgetItem上设置字体等于设置索引的
Qt.FontRole
,因此您可以通过函数轻松访问它,调用基本实现以获取将要返回的编辑器,并在设置字体时将字体应用于该编辑器
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))
# ...
class FontDelegate(QStyledItemDelegate):
def createEditor(自、父、选项、索引):
editor=super().createEditor(父级、选项、索引)
font=index.data(Qt.FontRole)
如果字体不是无:
编辑器.setFont(字体)
返回编辑器
类主窗口(QMainWindow):
# ...
def初始表格(自身):
self.table=QTableWidget(5,5)
self.main_layout.addWidget(self.table)
[[self.table.setItem(行、列、QTableWidgetItem(“文本”)用于范围(5)中的行)]用于范围(5)中的列]
self.table.setItemDelegate(FontDelegate(self.table))
# ...
不相关的注意事项:表应该添加到布局中(正如我在上面代码中所做的),而不仅仅是作为主窗口的子窗口创建。谢谢,它可以工作。但不是实时的。。。如何解决这个问题?你说的“但不是实时”是什么意思?它的意思是。。。不是马上。(sry,我不会英语)请想办法解释一下。为了查看结果,我更改了当前单元格。我想,出于这个原因,我使用了“table.setEditTriggers(QTableWidget.CurrentChanged)”