【问题标题】:How can I get more input text in PyQt5 InputDialog?如何在 PyQt5 InputDialog 中获取更多输入文本?
【发布时间】:2019-05-07 09:14:03
【问题描述】:

我想在 PyQt5.QtWidgets QInputDialog 中从用户那里获得多个输入文本...在这段代码中,我只能获得一个输入文本框,当我单击按钮时我想获得更多输入文本框。查看图片了解更多信息...

from PyQt5.QtWidgets import (QApplication,QWidget,QPushButton,QLineEdit,QInputDialog,QHBoxLayout)
import sys

class FD(QWidget):
    def __init__(self):
        super().__init__()
        self.mysf()

    def mysf(self):
        hbox = QHBoxLayout()
        self.btn = QPushButton('ClickMe',self)
        self.btn.clicked.connect(self.sd)
        hbox.addWidget(self.btn)
        hbox.addStretch(1)

        self.le = QLineEdit(self)
        hbox.addWidget(self.le)

        self.setLayout(hbox)

        self.setWindowTitle("InputDialog")
        self.setGeometry(300,300,290,150)
        self.show()
    def sd(self):
        text , ok = QInputDialog.getText(self,'InputDialog','EnterYourName = ')
        if ok:
            self.le.setText(str(text))
if __name__ == '__main__':
    app = QApplication(sys.argv)
    F = FD()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

    QInputDialog 是一个方便的类,用于检索用户的单个输入。

    如果您需要更多字段,请使用QDialog

    例如:

    class InputDialog(QDialog):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            self.first = QLineEdit(self)
            self.second = QLineEdit(self)
            buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self);
    
            layout = QFormLayout(self)
            layout.addRow("First text", self.first)
            layout.addRow("Second text", self.second)
            layout.addWidget(buttonBox)
    
            buttonBox.accepted.connect(self.accept)
            buttonBox.rejected.connect(self.reject)
    
        def getInputs(self):
            return (self.first.text(), self.second.text())
    
    if __name__ == '__main__':
    
        import sys
        app = QApplication(sys.argv)
        dialog = InputDialog()
        if dialog.exec():
            print(dialog.getInputs())
        exit(0)
    

    【讨论】:

      【解决方案2】:

      这是一个通用解决方案,它接受任意数量的输入,基于 Dimitry Ernot 的回答。

      from PyQt5.QtWidgets import QApplication, QLineEdit, QDialogButtonBox, QFormLayout, QDialog
      from typing import List
      
      class InputDialog(QDialog):
          def __init__(self, labels:List[str], parent=None):
              super().__init__(parent)
              
              buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self)
              layout = QFormLayout(self)
              
              self.inputs = []
              for lab in labels:
                  self.inputs.append(QLineEdit(self))
                  layout.addRow(lab, self.inputs[-1])
              
              layout.addWidget(buttonBox)
              
              buttonBox.accepted.connect(self.accept)
              buttonBox.rejected.connect(self.reject)
          
          def getInputs(self):
              return tuple(input.text() for input in self.inputs)
      
      if __name__ == '__main__':
          import sys
          app = QApplication(sys.argv)
          dialog = InputDialog(labels=["First","Second","Third","Fourth"])
          if dialog.exec():
              print(dialog.getInputs())
          exit(0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 2019-03-04
        • 2012-11-12
        • 2018-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多