【问题标题】:How to make QLineEdit-QCompleter upperlines automatically如何让 QLineEdit-QCompleter 自动上线
【发布时间】:2016-07-02 23:44:41
【问题描述】:

我有一个文本列表,如果用户在QLineEdit 中搜索文本,我会打印该文本。 QLineEdit中有一个QCompleter

问题是,我们知道Texttext 不一样,但对用户来说是一样的。因此,如果用户开始输入Texttext,我想在QLineEdit 中将其实时更改为TEXT。所以每当用户输入一个字母时,我想在QCompleter-QLineEdit中把它变成大写。我怎样才能做到这一点?我有这个自动取款机;

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。但不知道怎么做。

【问题讨论】:

    标签: python python-3.4 pyqt5 qlineedit qcompleter


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多