如何自动生成QLineEdit-QCompleter上限

问题描述:

我有一个文本列表,如果用户在QLineEdit中搜索文本,我会打印文本。 QLineEdit中有一个QCompleter。如何自动生成QLineEdit-QCompleter上限

问题是,因为我们知道Texttext是不一样的,但它对用户是一样的。所以如果用户开始输入Texttext,我想在QLineEdit中实时更改为TEXT。所以无论何时用户输入一个字母,我都希望在QCompleter-QLineEdit中使其成为大写。我怎样才能做到这一点?我有这个atm;

from PyQt5.QtWidgets import QApplication,QPushButton,QMainWindow,QLabel,QLineEdit,QCompleter 
from PyQt5 import QtCore, QtWidgets, QtGui 
from PyQt5.QtCore import QPoint 
import sys 

class cssden(QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.mwidget = QMainWindow(self) 
     self.setWindowFlags(QtCore.Qt.FramelessWindowHint) 

     #size 
     self.setFixedSize(600,400) 

     #LINE EDIT QCOMPLETER 
     self.label = QLineEdit(self) 
     self.label.setGeometry(100,100,300,30) 
     self.label.setStyleSheet("color: red;" 
           "font: bold 15pt 'Arial';") 

     self.t = ["Hello","hi","Hey"] 
     self.label.setCompleter(QCompleter(self.t, self)) 

     #BUTTON 
     self.buton = QPushButton(self) 
     self.buton.setText("Click") 
     self.buton.setGeometry(200,140,90,50) 

     self.buton.clicked.connect(self.hangiButon) 

     #SET LABEL 
     self.set_label = QLabel(self) 
     self.set_label.setGeometry(100,300,900,100) 
     self.set_label.setStyleSheet("color: green;" 
            "font: bold 18pt 'Times New Roman';") 
     self.show() 


    def hangiButon(self): 
     print(self.label.text(), self.t.index(self.label.text())+1) 
     self.set_label.setText("Pressed to --> {}.".format(self.label.text().rstrip())) 

    def mousePressEvent(self, event): 
     self.oldPos = event.globalPos() 

    def mouseMoveEvent(self, event): 
     delta = QPoint (event.globalPos() - self.oldPos) 
     self.move(self.x() + delta.x(), self.y() + delta.y()) 
     self.oldPos = event.globalPos() 

app = QApplication(sys.argv) 
app.setStyleSheet("QMainWindow{background-color: rgb(30,30,30);border: 2px solid rgb(20,20,20)}") 

ex = cssden() 
sys.exit(app.exec_()) 

所以,如果我按h我想看到所有的话,不仅hi,我想立即更改该h。但无法弄清楚如何。

QCompleter插件具有setCaseSensitivity属性,需要一个QtCore.Qt.CaseSensitive/QtCore.Qt.CaseInsensitive或简称为1或0(docs)。

The Qt documentaion“默认是Qt :: CaseSensitive。”

更改属性不区分大小写匹配:

self.t = ["Hello","hi","Hey"] 
my_completer = QCompleter(self.t, self) 
my_completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) 
# my_completer.setCaseSensitivity(0) 
self.label.setCompleter(my_completer) 

要更改用户输入为大写可以添加改变所述文本的方法:

def to_upper(self, txt): 
    self.label.setText(txt.upper()) 

然后其可以连接如self.label.textChanged

self.label.textChanged.connect(self.to_upper) 

放在一起:

from PyQt5.QtWidgets import QApplication,QPushButton,QMainWindow,QLabel,QLineEdit,QCompleter 
from PyQt5 import QtCore, QtWidgets, QtGui 
from PyQt5.QtCore import QPoint 
import sys 

class cssden(QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.mwidget = QMainWindow(self) 
     self.setWindowFlags(QtCore.Qt.FramelessWindowHint) 

     #size 
     self.setFixedSize(600,400) 

     #LINE EDIT QCOMPLETER 
     self.label = QLineEdit(self) 
     self.label.setGeometry(100,100,300,30) 
     self.label.setStyleSheet("color: red;" 
           "font: bold 15pt 'Arial';") 

     self.label.textChanged.connect(self.to_upper) 

     self.t = ["Hello","hi","Hey"] 
     my_completer = QCompleter(self.t, self) 
     #my_completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) 
     my_completer.setCaseSensitivity(0) 
     self.label.setCompleter(my_completer) 

     #BUTTON 
     self.buton = QPushButton(self) 
     self.buton.setText("Click") 
     self.buton.setGeometry(200,140,90,50) 

     self.buton.clicked.connect(self.hangiButon) 

     #SET LABEL 
     self.set_label = QLabel(self) 
     self.set_label.setGeometry(100,300,900,100) 
     self.set_label.setStyleSheet("color: green;" 
            "font: bold 18pt 'Times New Roman';") 
     self.show() 

    def to_upper(self, txt): 
     self.label.setText(txt.upper()) 

    def hangiButon(self): 
     print(self.label.text(), self.t.index(self.label.text())+1) 
     self.set_label.setText("Pressed to --> {}.".format(self.label.text().rstrip())) 

    def mousePressEvent(self, event): 
     self.oldPos = event.globalPos() 

    def mouseMoveEvent(self, event): 
     delta = QPoint (event.globalPos() - self.oldPos) 
     self.move(self.x() + delta.x(), self.y() + delta.y()) 
     self.oldPos = event.globalPos() 

app = QApplication(sys.argv) 
app.setStyleSheet("QMainWindow{background-color: rgb(30,30,30);border: 2px solid rgb(20,20,20)}") 

ex = cssden() 
sys.exit(app.exec_())