我正在编写一个简单的PyQt5应用程序,它使用QTableView
小部件。我要做的是删除QTableView
中聚焦项周围的虚线框。对于最小的工作示例,我使用以下代码:
import sys from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, main_window): main_window.setObjectName("main_window") main_window.resize(640, 480) self.main_container = QtWidgets.QWidget(main_window) self.main_container.setObjectName("main_container") self.verticalLayout = QtWidgets.QVBoxLayout(self.main_container) self.verticalLayout.setObjectName("verticalLayout") self.model = QtGui.QStandardItemModel(0, 2, main_window) for col1, col2 in (("foo", "bar"), ("fizz", "buzz")): it_col1 = QtGui.QStandardItem(col1) it_col2 = QtGui.QStandardItem(col2) self.model.appendRow([it_col1, it_col2]) self.view = QtWidgets.QTableView( self.main_container, showGrid=False, selectionBehavior=QtWidgets.QAbstractItemView.SelectRows ) self.view.setModel(self.model) self.verticalLayout.addWidget(self.view) main_window.setCentralWidget(self.main_container) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
它会产生以下结果(红色箭头显示要删除的框):
SO和Qt论坛上的不同主题建议将我的代码更改为:
# Previous code self.view.setModel(self.model) self.view.setStyleSheet(" QTableView::item:focus { outline: none } ") # also 0px was suggested # OR self.view.setModel(self.model) self.view.setStyleSheet(" QTableView::item:focus { border: none } ") # also 0px was suggested # OR self.view.setModel(self.model) self.view.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) # Further code
但这些方法都不适用于我:
-
outline: none
这一方法几乎没有改变; -
border: none
不仅保留盒子,还用白色填充物品; -
setFocusPolicy
视觉效果最好,但使单元格不可编辑,并且通常对键盘事件没有响应(这是意料之中的,因为它们现在无法聚焦并接受事件)
所以我的问题是:这是否可能以某种方式移除或至少定制这个盒子?如果这很重要,我在Windows计算机上使用PyQt5==5.15.4
,PyQt5-Qt5==5.15.2
。