【问题标题】:Reset input dialog when user press cancel and saving input to list当用户按下取消并将输入保存到列表时重置输入对话框
【发布时间】:2020-06-30 03:54:18
【问题描述】:

我正在创建一个 GUI,它将用户输入作为给定范围的文本。到目前为止,我所做的是获得一个 QInputDialog 来获取用户输入。但问题是每当我点击取消时,它都会进入下一个输入。我想重置字段并重新开始。我还想在用户完成后将这些输入添加到列表中。

这是我的代码:

class Example(QWidget):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.le = QLabel()
        self.le.move(30, 62)
        self.le.resize(400,22)
        self.le.setText("")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(290, 160, 160, 80))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.pushButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.pushButton.setMaximumSize(QtCore.QSize(16777215, 150))
        font = QtGui.QFont()
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.showDialog)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "Start"))



    def showDialog(self):
        num, ok = QInputDialog.getInt(self, 'Setup', 'How many rooms in the house?:')

        for i in range(num+1):
            name, ok = QInputDialog.getText(self, 'Setup', 'room{}:'.format(i+1))

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)  
    MainWindow = QtWidgets.QMainWindow()  
    ui = Example()  
    ui.setupUi(MainWindow)  
    MainWindow.show()
    sys.exit(app.exec_()) 

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

    解决方案不是使用for循环,而是使用while循环,当用户按下ok按钮时索引会增加:

    def showDialog(self):
        names = []
        num, ok = QtWidgets.QInputDialog.getInt(
            self, "Setup", "How many rooms in the house?:"
        )
        i = 0
        while i < num:
            name, ok = QtWidgets.QInputDialog.getText(
                self, "Setup", "room{}:".format(i + 1)
            )
            if ok:
                i += 1
                names.append(name)
        print(names)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多