2017-06-15 73 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_())