首页 > 解决方案 > PyQt5 获取具有多个值的输入

问题描述

我想在 for 循环中打开一个新的对话框(弹出)窗口,其中包含我将保存到数据库中的字段,例如

onPrintButton(self):
  for file in files:
     ...
     openDialogWindow() the for cycle will stop here until I press OK button with filled in values

在打开的对话框窗口中会有各种字段(其中一些已经预填充),例如

date
file_name
printer_name

等等

当我单击“确定”按钮时,值将保存到数据库中(您可以将它们打印到控制台),并且 for 循环将在它停止的地方继续。

您能否向我展示此类功能的脚手架(使用哪些 Qt 类等)?

标签: pyqt5

解决方案


这是一个建议,你的 QDialog 可以有你想要的任何东西。

class Dialog(QDialog):

    accepted = pyqtSignal(dict)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.date = QDateEdit()
        self.date.setDisplayFormat('MMM d, yyyy')
        self.date.setDate(QDate.currentDate())
        self.file_name = QLineEdit()
        self.file_name.textEdited[str].connect(self.unlock)
        self.printer_name = QLineEdit()
        self.btn = QPushButton('OK')
        self.btn.setDisabled(True)
        self.btn.clicked.connect(self.ok_pressed)

        form = QFormLayout(self)
        form.addRow('Date', self.date)
        form.addRow('*File Name', self.file_name)
        form.addRow('Printer Name', self.printer_name)
        form.addRow(self.btn)

    def unlock(self, text):
        if text:
            self.btn.setEnabled(True)
        else:
            self.btn.setDisabled(True)

    def ok_pressed(self):
        values = {'Date': self.date.date(),
                  'File': self.file_name.text(),
                  'Printer': self.printer_name.text()}
        self.accepted.emit(values)
        self.accept()

当您从父小部件调用它时:

class Template(QWidget):

    def __init__(self):
        super().__init__()
        dg = Dialog()
        dg.accepted.connect(self.do_something)
        dg.exec_()

    def do_something(self, values):
        print(values['File'], values['Date'], values['Printer'])

推荐阅读