防止QStackedWidget自动对焦

问题描述 投票:0回答:1

QStackedWidget 似乎在启动或切换页面时聚焦并选择第一个子小部件的内容。

这是我启动程序时得到的结果(时间编辑小部件已聚焦并选择了第一个数字:

startup focus

我通过使用

currentChanged
事件将焦点设置为其他一些不可编辑的小部件来删除焦点。

有没有更好的方法来解决这个问题?

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
        self.stackedWidget.setGeometry(QtCore.QRect(110, 160, 351, 231))
        self.page_1 = QtWidgets.QWidget()
        self.timeEdit = QtWidgets.QTimeEdit(self.page_1)
        self.timeEdit.setGeometry(QtCore.QRect(50, 40, 118, 22))
        self.stackedWidget.addWidget(self.page_1)
        self.page_2 = QtWidgets.QWidget()
        self.stackedWidget.addWidget(self.page_2)
        MainWindow.setCentralWidget(self.centralwidget)

        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        # my workaround for removing focus - set focus to the parent window on startup/page change.
        MainWindow.setFocus()
        self.stackedWidget.currentChanged.connect(self.onPageChange) 
    
    def onPageChange(self, index):
        MainWindow.setFocus()

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_())
qt qt5
1个回答
0
投票

我有同样的行为,并修复了使用

QApplication.focusWidget().clearFocus()

我改变页面后

© www.soinside.com 2019 - 2024. All rights reserved.