QLineEdit python 方式的大写输入
Uppercase input in QLineEdit python way
我已经使用 QT Designer 制定了一个 UI,但发现没有参数可以让我将 QLineEdit 输入设置为大写。
在网上搜索了一下,只看到了极少数符合我需要的结果,但都是用Qt编写的。例如,这个 link
那么,有没有办法让我以 pythonic 的方式做到这一点?
试试这个,
我相信这符合您的目的。我不会称它为 pythonic。更像是 PyQt 覆盖。
#次代码编辑
from PyQt4 import QtGui
import sys
#===============================================================================
# MyEditableTextBox-
#===============================================================================
class MyEditableTextBox(QtGui.QLineEdit):
#|-----------------------------------------------------------------------------|
# Constructor
#|-----------------------------------------------------------------------------|
def __init__(self,*args):
#*args to set parent
QtGui.QLineEdit.__init__(self,*args)
#|-----------------------------------------------------------------------------|
# focusOutEvent :-
#|-----------------------------------------------------------------------------|
def focusOutEvent(self, *args, **kwargs):
text = self.text()
self.setText(text.__str__().upper())
return QtGui.QLineEdit.focusOutEvent(self, *args, **kwargs)
#|--------------------------End of focusOutEvent--------------------------------|
#|-----------------------------------------------------------------------------|
# keyPressEvent
#|-----------------------------------------------------------------------------|
def keyPressEvent(self, event):
if not self.hasSelectedText():
pretext = self.text()
self.setText(pretext.__str__().upper())
return QtGui.QLineEdit.keyPressEvent(self, event)
#|--------------------End of keyPressEvent-------------------------------------|
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
lay = QtGui.QHBoxLayout()
w.setLayout(lay)
le1 = MyEditableTextBox()
lay.addWidget(le1)
le2 = MyEditableTextBox()
lay.addWidget(le2)
w.show()
sys.exit(app.exec_())
最简单的方法是使用 validator.
这将立即大写用户键入或粘贴到行编辑中的任何内容:
from PyQt4 import QtCore, QtGui
class Validator(QtGui.QValidator):
def validate(self, string, pos):
return QtGui.QValidator.Acceptable, string.upper(), pos
# for old code still using QString, use this instead
# string.replace(0, string.count(), string.toUpper())
# return QtGui.QValidator.Acceptable, pos
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.edit = QtGui.QLineEdit(self)
self.validator = Validator(self)
self.edit.setValidator(self.validator)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.edit)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 300, 100)
window.show()
sys.exit(app.exec_())
嘿,我知道我有点晚了,但我希望这可以帮助像我一样花了一些时间搜索这个的人
我的案例:
我试图只将第一个字母转换为大写,这就是我最终得到的结果并且它起作用了(只是 python 的初学者所以如果你能把它做得更多 pythonic 请告诉我)
在定义函数中:line_edit_object.textChanged.connect(lambda:auto_capital(line_edit_object))
函数auto_capital:
def auto_capital(line_edit_object):
edit=line_edit_object
text=edit.text()
edit.text(text.title())
这将解决所有问题。随意让它更 pytonic。
我已经使用 QT Designer 制定了一个 UI,但发现没有参数可以让我将 QLineEdit 输入设置为大写。
在网上搜索了一下,只看到了极少数符合我需要的结果,但都是用Qt编写的。例如,这个 link
那么,有没有办法让我以 pythonic 的方式做到这一点?
试试这个, 我相信这符合您的目的。我不会称它为 pythonic。更像是 PyQt 覆盖。
#次代码编辑
from PyQt4 import QtGui
import sys
#===============================================================================
# MyEditableTextBox-
#===============================================================================
class MyEditableTextBox(QtGui.QLineEdit):
#|-----------------------------------------------------------------------------|
# Constructor
#|-----------------------------------------------------------------------------|
def __init__(self,*args):
#*args to set parent
QtGui.QLineEdit.__init__(self,*args)
#|-----------------------------------------------------------------------------|
# focusOutEvent :-
#|-----------------------------------------------------------------------------|
def focusOutEvent(self, *args, **kwargs):
text = self.text()
self.setText(text.__str__().upper())
return QtGui.QLineEdit.focusOutEvent(self, *args, **kwargs)
#|--------------------------End of focusOutEvent--------------------------------|
#|-----------------------------------------------------------------------------|
# keyPressEvent
#|-----------------------------------------------------------------------------|
def keyPressEvent(self, event):
if not self.hasSelectedText():
pretext = self.text()
self.setText(pretext.__str__().upper())
return QtGui.QLineEdit.keyPressEvent(self, event)
#|--------------------End of keyPressEvent-------------------------------------|
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
lay = QtGui.QHBoxLayout()
w.setLayout(lay)
le1 = MyEditableTextBox()
lay.addWidget(le1)
le2 = MyEditableTextBox()
lay.addWidget(le2)
w.show()
sys.exit(app.exec_())
最简单的方法是使用 validator.
这将立即大写用户键入或粘贴到行编辑中的任何内容:
from PyQt4 import QtCore, QtGui
class Validator(QtGui.QValidator):
def validate(self, string, pos):
return QtGui.QValidator.Acceptable, string.upper(), pos
# for old code still using QString, use this instead
# string.replace(0, string.count(), string.toUpper())
# return QtGui.QValidator.Acceptable, pos
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.edit = QtGui.QLineEdit(self)
self.validator = Validator(self)
self.edit.setValidator(self.validator)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.edit)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 300, 100)
window.show()
sys.exit(app.exec_())
嘿,我知道我有点晚了,但我希望这可以帮助像我一样花了一些时间搜索这个的人
我的案例: 我试图只将第一个字母转换为大写,这就是我最终得到的结果并且它起作用了(只是 python 的初学者所以如果你能把它做得更多 pythonic 请告诉我)
在定义函数中:line_edit_object.textChanged.connect(lambda:auto_capital(line_edit_object))
函数auto_capital:
def auto_capital(line_edit_object):
edit=line_edit_object
text=edit.text()
edit.text(text.title())
这将解决所有问题。随意让它更 pytonic。