【问题标题】:PyQt, set specific number of Line Edit inputsPyQt,设置特定数量的行编辑输入
【发布时间】:2019-10-26 07:57:45
【问题描述】:

我想一步设置输入数量(输入 = 行编辑),单击按钮后我想获得行编辑的数量。 (如图所示)

例如,我有 3 个输入参数,所以我想设置数字 3,单击按钮并获取输入的 3 个字段(行编辑)。

我不想为每个选项创建新的小部件并替换旧的小部件。 (我有 4 个参数的输入值可变,组合太多。) 最终我可以将多个值插入到一个行编辑中,但这些选项对我来说都不是很好。你有什么建议吗?

感谢您的回答。

【问题讨论】:

  • 嗯,展示你的尝试
  • Qt-Designer 不能在这里工作。您必须在运行时在代码中执行此操作。可能您会在 Designer 中需要某种容器小部件(QGroupBox、QWidget、QStackedWidget 等),其宽度和高度具有合理的 minimumSize 值。然后在您的代码中,为您的容器创建一个 QVBoxLayout 并用 QLineEdit 小部件填充它。

标签: python pyqt qlineedit


【解决方案1】:

试试看:

from PyQt5 import QtWidgets

class Widget(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__()
        self.resize(300,300)
        self.items = []
        self.item_count = 0

        label = QtWidgets.QLabel("NUMBER OF LINE EDITS")

        self.spinBox = QtWidgets.QSpinBox(self)
        self.spinBox.setRange(0, 7)
        self.spinBox.valueChanged.connect(self.set_item_count)

        button = QtWidgets.QPushButton("apply", clicked=self.on_clicked)

        self.lineEdit = QtWidgets.QLineEdit

        groupBox = QtWidgets.QGroupBox("Line Edit")
        self.item_layout = QtWidgets.QVBoxLayout(groupBox)
        self.item_layout.addStretch(2)

        g_layout = QtWidgets.QGridLayout(self)
        g_layout.addWidget(label, 0, 0, 1, 2)
        g_layout.addWidget(self.spinBox, 0, 2, 1, 1)
        g_layout.addWidget(button, 1, 0, 1, 1)
        g_layout.addWidget(groupBox, 2, 0, 5, 3)

    def on_clicked(self):
        print( *[ item.text() for item in  self.items[:self.spinBox.value()] ], sep="\n" )

    def set_item_count(self, new_count:int):
        n_items = len(self.items)
        for ii in range(n_items, new_count):
            item = self.lineEdit(self)
            self.items.append(item)
            self.item_layout.insertWidget(n_items, item)
        for ii in range(self.item_count, new_count):
            self.item_layout.itemAt(ii).widget().show()
        for ii in range(new_count, self.item_count):
            self.item_layout.itemAt(ii).widget().hide()
        self.item_count = new_count

if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    window = Widget()
    window.show()
    app.exec()

【讨论】:

  • 太棒了!这绝对是完美的!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2021-01-31
  • 1970-01-01
  • 2023-03-28
  • 2013-06-29
  • 2022-07-22
相关资源
最近更新 更多