我使用QT Designer绘制了一个UI,但发现我没有参数可以将QLineEdit输入设置为大写。
在进行了一些在线搜索后,我只看到了一些满足我需求的结果,但是所有结果都是用Qt编码的。例如,这个link
那么,我有办法以pythonic的方式做到这一点吗?
答案 0 :(得分:6)
最简单的方法是使用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_())
答案 1 :(得分:3)
试试这个, 我相信这符合你的目的。我不会称之为pythonic。更像是PyQt覆盖。
#minor代码编辑
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_())
答案 2 :(得分:0)
嘿,我知道我有点迟到了,但我希望这可以帮助像我这样花一些时间寻找其他人的其他人
<强> Mycase:强> 我试图只将第一个字母转换为大写,这就是我最终的结果并且它有效(只是初学者在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。