在PyQt5中使用Inputmask将光标设置为QLineEdit的开头

问题描述

我为桌面软件创建了代码。那就是,在QLineEdit中,我设置了一个输入掩码。当我运行程序并单击该行编辑时,我在行尾看到了光标位置。下面是我的一些代码。...

from PyQt5 import QtCore,QtGui,QtWidgets


class Ui_MainWindow(object):
    def setupUi(self,MainWindow):
        MainWindow.setobjectName("MainWindow")
        MainWindow.resize(380,191)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setobjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(80,20,211,41))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.lineEdit.setFont(font)
        self.lineEdit.setobjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(80,110,41))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.lineEdit_2.setFont(font)
        self.lineEdit_2.setobjectName("lineEdit_2")
        self.lineEdit_2.setInputMask("00.00")
        self.lineEdit_2.setCursorPosition(0)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self,MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setwindowTitle(_translate("MainWindow","MainWindow"))


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_())

我已经提到过setCursorPosition(0)。但这是行不通的。当我单击lineEdit_2时,我希望该光标位于该lineedit的开头。

self.lineEdit_2.setInputMask("00.00")
self.lineEdit_2.setCursorPosition(0)

解决方法

您可以在行编辑中安装事件过滤器,并对任何鼠标单击事件做出反应:

from PyQt5 import QtCore,QtWidgets
from ui_mainwindow import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.lineEdit_2.installEventFilter(self)

    def eventFilter(self,source,event):
        if source == self.lineEdit_2 and event.type() == QtCore.QEvent.MouseButtonPress:
            self.lineEdit_2.setFocus(QtCore.Qt.MouseFocusReason)
            self.lineEdit_2.setCursorPosition(0)
            return True
        return super().eventFilter(source,event)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

请注意,您应该使用单独的脚本编写以上内容,并将其用作主程序;您发布的代码(取自pyuic的输出)应该从不修改。进一步了解using Designer