PyQt在一行中输入多个值

时间:2018-12-27 02:42:09

标签: python pyqt

我希望用户在PyQt中的一个文本编辑或任何其他输入小部件中输入一系列用空格(或逗号)分隔的值。那么我希望能够在计算中使用这些值。请参见图片,该图片提供了我要尝试的示例。

Example picture

1 个答案:

答案 0 :(得分:1)

通常的想法是使用QLineEdit并防止用户使用QRegExpValidator输入不适当的值,例如,假设您只想输入浮动值,以下示例仅允许输入该类型的值,空格通过计算总和并在QListWidget中显示值来得出逗号:

from PyQt5 import QtCore, QtGui, QtWidgets

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

        regex = r"^(\s*(-|\+)?\d+(?:\.\d+)?\s*,\s*)+(-|\+)?\d+(?:\.\d+)?\s*$"
        validator = QtGui.QRegExpValidator(QtCore.QRegExp(regex), self)
        self._le = QtWidgets.QLineEdit()
        self._le.setValidator(validator)

        self._list_widget = QtWidgets.QListWidget()

        button = QtWidgets.QPushButton("Press me")
        button.clicked.connect(self.on_clicked)

        self._result_label = QtWidgets.QLabel(alignment=QtCore.Qt.AlignCenter)

        flay.addRow("Input: ", self._le)
        flay.addRow("Output: ", self._list_widget)
        flay.addRow("Sum of values: ", self._result_label)
        flay.addRow(button)

    @QtCore.pyqtSlot()
    def on_clicked(self):
        self._list_widget.clear()
        if self._le.text():
            values = [float(val) for val in self._le.text().split(",")]
            print(values)
            self._list_widget.addItems([str(val) for val in values])
            self._result_label.setText(str(sum(values)))

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

enter image description here