如何在输入对话框中使用QCompleter?

2024-04-29 19:56:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python应用程序,用户可以在对话框中输入字符串。如何使用QCompleter简化输入?你知道吗

我已经在不同的网站上搜索过了,并且读过 https://doc.qt.io/qt-5/qcompleter.html#details 但找不到解决此问题的任何帮助。你知道吗

对我来说,QCompleter似乎只适用于QLineEdit和QComboBox。(请证明我错了)

ian, okPressed = QInputDialog.getText(self, "IAN", "Please enter IAN:")

如果有人能给我举一些代码示例来说明如何处理这个问题,那会对我有很大帮助。你知道吗

如果不能在QInputDialog中使用QCompleter,你们有解决方法吗?你知道吗

非常感谢=)


Tags: 字符串用户httpsio应用程序doc网站html
1条回答
网友
1楼 · 发布于 2024-04-29 19:56:18

有两种可能的解决方案:

  • 使用^{}通过小部件之间的父子关系获取^{}
from PyQt5 import QtCore, QtGui, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        button = QtWidgets.QPushButton("Press me", clicked=self.onClicked)
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(button)

    @QtCore.pyqtSlot()
    def onClicked(self):
        QtCore.QTimer.singleShot(0, self.onTimeout)
        ian, okPressed = QtWidgets.QInputDialog.getText(
            self, "IAN", "Please enter IAN:"
        )

    @QtCore.pyqtSlot()
    def onTimeout(self):
        dialog = self.findChild(QtWidgets.QInputDialog)
        if dialog is not None:
            le = dialog.findChild(QtWidgets.QLineEdit)
            if le is not None:
                words = ["alpha", "omega", "omicron", "zeta"]
                completer = QtWidgets.QCompleter(words, le)
                le.setCompleter(completer)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.resize(320, 240)
    w.show()
    sys.exit(app.exec_())
  • 不要使用静态方法并使用相同的元素创建^{}
from PyQt5 import QtCore, QtGui, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        button = QtWidgets.QPushButton("Press me", clicked=self.onClicked)
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(button)

    @QtCore.pyqtSlot()
    def onClicked(self):
        dialog = QtWidgets.QInputDialog(self)
        dialog.setWindowTitle("IAN")
        dialog.setLabelText("Please enter IAN:")
        dialog.setTextValue("")
        le = dialog.findChild(QtWidgets.QLineEdit)
        words = ["alpha", "omega", "omicron", "zeta"]
        completer = QtWidgets.QCompleter(words, le)
        le.setCompleter(completer)

        ok, text = (
            dialog.exec_() == QtWidgets.QDialog.Accepted,
            dialog.textValue(),
        )
        if ok:
            print(text)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.resize(320, 240)
    w.show()
    sys.exit(app.exec_())

相关问题 更多 >