【发布时间】:2020-10-07 12:03:53
【问题描述】:
我需要从用户输入中检查列表中的重复项。
所以如果再次输入“Usa”,就会出现一个错误,说那是无效的
add 连接到一个按钮:
Add 部分是它被破坏的地方,它显示所有但在消息框弹出后失败。
我尝试同时使用 try 和 if 语句,但我的主要问题是我不确定 text.listwidget 的输入存储在哪里
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QInputDialog, QDialog, QLineEdit, QMessageBox ,QLabel
class Window(QDialog):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(580, 600)
self.verticalLayout_2 = QtWidgets.QVBoxLayout(Dialog)
self.verticalLayout_2.setContentsMargins(15, 15, 15, 15)
self.verticalLayout_2.setSpacing(6)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setContentsMargins(15, 15, 15, 15)
self.horizontalLayout.setSpacing(6)
self.horizontalLayout.setObjectName("horizontalLayout")
self.listWidget = QtWidgets.QListWidget(Dialog)
self.listWidget.setObjectName("listWidget")
self.horizontalLayout.addWidget(self.listWidget)
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setContentsMargins(15, 15, 15, 15)
self.verticalLayout.setSpacing(6)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton_add = QtWidgets.QPushButton(Dialog)
self.pushButton_add.setObjectName("pushButton_add")
self.verticalLayout.addWidget(self.pushButton_add)
self.pushButton_edit = QtWidgets.QPushButton(Dialog)
self.pushButton_edit.setObjectName("pushButton_edit")
self.verticalLayout.addWidget(self.pushButton_edit)
self.pushButton_remove = QtWidgets.QPushButton(Dialog)
self.pushButton_remove.setObjectName("pushButton_remove")
self.verticalLayout.addWidget(self.pushButton_remove)
self.pushButton_up = QtWidgets.QPushButton(Dialog)
self.pushButton_up.setObjectName("pushButton_up")
self.verticalLayout.addWidget(self.pushButton_up)
self.pushButton_down = QtWidgets.QPushButton(Dialog)
self.pushButton_down.setObjectName("pushButton_down")
self.verticalLayout.addWidget(self.pushButton_down)
self.pushButton_sort = QtWidgets.QPushButton(Dialog)
self.pushButton_sort.setObjectName("pushButton_sort")
self.verticalLayout.addWidget(self.pushButton_sort)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem)
self.pushButton_close = QtWidgets.QPushButton(Dialog)
self.pushButton_close.setObjectName("pushButton_close")
self.verticalLayout.addWidget(self.pushButton_close)
self.horizontalLayout.addLayout(self.verticalLayout)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
self.pushButton_add.clicked.connect(self.add)
self.pushButton_edit.clicked.connect(self.edit)
self.pushButton_remove.clicked.connect(self.remove)
self.pushButton_up.clicked.connect(self.up)
self.pushButton_down.clicked.connect(self.down)
self.pushButton_sort.clicked.connect(self.sort)
self.pushButton_close.clicked.connect(self.close)
self.label_1 = QLabel(self)
self.label_1.setText("Enter a country: ")
self.label_1.move(10, 580)
self.label_1.resize(280, 40)
self.Country()
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Covid country"))
Dialog.setWindowIcon(QIcon("icon.png"))
self.pushButton_add.setText(_translate("Dialog", "Add"))
self.pushButton_edit.setText(_translate("Dialog", "Edit"))
self.pushButton_remove.setText(_translate("Dialog", "Remove"))
self.pushButton_up.setText(_translate("Dialog", "Up"))
self.pushButton_down.setText(_translate("Dialog", "Down"))
self.pushButton_sort.setText(_translate("Dialog", "Sort"))
self.pushButton_close.setText(_translate("Dialog", "Close"))
def Country(self):
self.country = []
self.listWidget.addItems(self.country)
self.listWidget.setCurrentRow(0)
def add(self):
row = self.listWidget.currentRow()
text, ok = QInputDialog.getText(self, "Country", "Enter country")
texts = self.listWidget.items()
if ok and text is not None:
self.listWidget.insertItem(row, text)
if texts in self.listWidget.items():
msg = QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText("No country selected.")
msg.setWindowTitle("Error")
msg.exec_()
return
def edit(self):
row = self.listWidget.currentRow()
item = self.listWidget.item(row)
if item is not None:
string, ok = QInputDialog.getText(self, "Country Dialog", "Edit Country",
QLineEdit.Normal, item.text())
if ok and string is not None:
item.setText(string)
def remove(self):
row = self.listWidget.currentRow()
item = self.listWidget.item(row)
if item is None:
msg = QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText("No country selected.")
msg.setWindowTitle("Error")
msg.exec_()
return
reply = QMessageBox.question(self, "Remove Country", "Do You Want To Remove Country " + str(item.text()),
QMessageBox.Yes | QMessageBox.No)
if reply == QMessageBox.Yes:
item = self.listWidget.takeItem(row)
del item
def up(self):
row = self.listWidget.currentRow()
if row >= 1:
item = self.listWidget.takeItem(row)
self.listWidget.insertItem(row - 1, item)
self.listWidget.setCurrentItem(item)
def down(self):
row = self.listWidget.currentRow()
if row < self.listWidget.count() - 1:
item = self.listWidget.takeItem(row)
self.listWidget.insertItem(row + 1, item)
self.listWidget.setCurrentItem(item)
def sort(self):
self.listWidget.sortItems()
def close(self):
quit()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Window()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
【问题讨论】:
-
你有什么问题?
-
我如何检查输入是否不是列表中的现有项目,如果是则抛出错误。如果没有,则将该项目添加到列表中
-
那么现有的代码在哪些方面不尽如人意?我想你已经运行了它,并且看到了我们读者目前仍然不知道的一些不良行为。您可能想对问题添加一些解释。
-
它不这样做,我不确定为什么应用程序打开,我点击添加,输入并点击确定,然后失败
-
你能分享一个最小可复制的例子吗?我们无法运行您的示例代码。
标签: python python-3.x pyqt5