gpt4 book ai didi

python - PySide:如何同时拥有输入掩码和占位符文本

转载 作者:行者123 更新时间:2023-11-28 18:22:03 26 4
gpt4 key购买 nike

我正在尝试使 lineEdit 小部件在未处于焦点时具有占位符文本(看起来像“MM/DD/YYYY”)并具有输入掩码(看起来像“//”,或者您可以通过斜线插入其他方式)对焦时。

目前输入掩码 setInputMask('99/99/9999') 优先,我想不出在 LineEdit 小部件上放置 hasFocus(或类似)信号的方法。

您将如何在一个小部件中实现这两种功能?保留占位符文本并创建一个在输入一定数量的字符后添加斜杠的方法会更容易吗?

另外,设置 mask 时,轻弹光标非常粗。这是怎么回事?如何恢复?

完整代码:

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

最佳答案

如果你想要一个小部件的自定义行为,你必须创建一个继承自它的类,在你的 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)

关于python - PySide:如何同时拥有输入掩码和占位符文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44577124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com