当用户按取消并将输入保存到列表时重置输入对话框



我正在创建一个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_()) 

解决方案不是使用 for 循环,而是使用 while-loop,当用户按下 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)

最新更新