【发布时间】:2021-10-10 17:33:27
【问题描述】:
我的 pyqt 布局包含几个小部件,包括 qtableview、qlineedit、qpushbutton 等。我可以使用 Tab 键浏览小部件,但是我正在尝试使用 Enter 键(返回)来浏览“qtableview”。
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QShortcut
from PyQt5.QtGui import QKeySequence
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
# label name
self.label_name = QtWidgets.QLabel(self.centralwidget)
self.label_name.setText( "Name")
self.verticalLayout.addWidget(self.label_name)
# line edit
self.lineEdit_name = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_name.setObjectName("lineEdit_name")
self.verticalLayout.addWidget(self.lineEdit_name)
#tableview
self.tableView = QtWidgets.QTableView(self.centralwidget)
# create tablemodel
self.table_model = QStandardItemModel()
self.table_model.setHorizontalHeaderLabels( ["Item", "Unit", "unitPrice", "Unit*unitPrice"])
self.table_model.insertRow(0)
self.tableView.setModel(self.table_model)
# keyboard shortcut activation
self.shortcut = QShortcut(QKeySequence("Return"), MainWindow)
self.shortcut.activated.connect(self.on_enter)
self.verticalLayout.addWidget(self.tableView)
MainWindow.setCentralWidget(self.centralwidget)
def on_enter(self):
print('hasFocus '+ str(self.tableView.hasFocus()))
if(self.tableView.hasFocus()):
self.tableView.focusNextChild()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
tableview.hasFocus() 用于检查焦点是否在tableview 上。我在这里面临的问题是,当我单击任何单元格self.tableView.hasFocus() 返回False 时,它不会激活self.tableView.focusNextChild(),并且我无法使用 Enter 键进一步导航。如果我不使用if(self.tableView.hasFocus()):,它可能会导致通过其他小部件(如qlineedit)进行导航。如何使用 Enter 键在表格单元格中导航?
测试 1:光标在 lineEdit 上,在键盘上按 Enter => 打印:hasFocus False
测试 2:选择表格单元格。按 Enter 键 => 打印:hasFocus True
测试 3:单击单元格(光标可见),按 Enter 键=> 打印:hasFocus False
这里我对测试 1 和测试 2 很满意。但是,在测试 3 中,hasFocus() 显示False,因此当我按 Enter 键时,课程不会从编辑模式中脱离表格。然后我需要使用tab键退出编辑模式,是否可以通过按Enter键退出编辑模式
【问题讨论】:
-
@eyllanesc,感谢您的评论,我很难解释这个问题。基本上我需要使用
Enter键来浏览表格视图
标签: python pyqt pyqt5 keyboard-shortcuts qtableview