2017-06-15 74 views
1

我试图做一个lineEdit部件具有占位符文本(看起来像“MM/DD/YYYY”)时,没有焦点,并有输入掩码(看起来像'/ /',或者你可以通过其他方式放入斜线)。PySide:如何拥有输入掩码和位置文字同时

目前输入掩码setInputMask('99/99/9999')优先,我不能找出一种方法来将一个hasFocus(或类似)信号放在LineEdit小部件上。

你会如何在一个小窗口同时实现这些功能呢? 难道是容易留下的占位符文本是创造,在输入一定数目的字符后面加上一个斜线的方法?

此外,当您设置一个面具轻拂光标是很厚。这是怎么回事,你如何回复它?

全码:

from PySide import QtCore, QtGui 

class Ui_MainWindow(object): 
    def myChanges(self): 
     self.lineEdit.installEventFilter(self.lineEdit.setInputMask('99/99/9999')) 
     self.lineEdit.setPlaceholderText('MM/DD/YYYY') 

    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(557, 351) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.lineEdit = QtGui.QLineEdit(self.centralwidget) 
     self.lineEdit.setGeometry(QtCore.QRect(100, 130, 113, 20)) 
     self.lineEdit.setObjectName("lineEdit") 
     self.lineEdit_2 = QtGui.QLineEdit(self.centralwidget) 
     self.lineEdit_2.setGeometry(QtCore.QRect(320, 130, 113, 20)) 
     self.lineEdit_2.setObjectName("lineEdit_2") 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 557, 21)) 
     self.menubar.setObjectName("menubar") 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName("statusbar") 
     MainWindow.setStatusBar(self.statusbar) 

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

     self.myChanges() 

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

回答

1

如果你愿意,你必须建立从这个继承,在QLineEdit的情况下的一类的小工具的自定义行为。为了让您的具体目标是在下面的章节中描述您必须使用focusInEvent和focusOutEvent方法:

class LineEdit(QtGui.QLineEdit): 
    def __init__(self, parent=None): 
     QtGui.QLineEdit.__init__(self, parent=parent) 
     self.setPlaceholderText('MM/DD/YYYY') 

    def focusInEvent(self, event): 
     self.setInputMask('99/99/9999') 

    def focusOutEvent(self, event): 
     self.setInputMask('') 

然后你应该更改为:

self.lineEdit = QtGui.QLineEdit(self.centralwidget) 

到:

self.lineEdit = LineEdit(self.centralwidget) 

完整代码:

from PySide import QtCore, QtGui 

class LineEdit(QtGui.QLineEdit): 
    def __init__(self, parent=None): 
     QtGui.QLineEdit.__init__(self, parent=parent) 
     self.setPlaceholderText('MM/DD/YYYY') 

    def focusInEvent(self, event): 
     self.setInputMask('99/99/9999') 

    def focusOutEvent(self, event): 
     self.setInputMask('') 


class Ui_MainWindow(object): 

    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(557, 351) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.centralwidget.setObjectName("centralwidget") 
     self.lineEdit = LineEdit(self.centralwidget) 
     self.lineEdit.setGeometry(QtCore.QRect(100, 130, 113, 20)) 
     self.lineEdit.setObjectName("lineEdit") 
     self.lineEdit_2 = QtGui.QLineEdit(self.centralwidget) 
     self.lineEdit_2.setGeometry(QtCore.QRect(320, 130, 113, 20)) 
     self.lineEdit_2.setObjectName("lineEdit_2") 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 557, 21)) 
     self.menubar.setObjectName("menubar") 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     self.statusbar.setObjectName("statusbar") 
     MainWindow.setStatusBar(self.statusbar) 

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

    def retranslateUi(self, MainWindow): 
     MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_())