Python 如何使用QDataWidgetMapper从QListWidget编辑字符串作为项目
我正在使用QListWidget、QSqlTableModel、QtableView和QDataWidgetMapper。QListWidget是ItemIsUserCheckable。 我能够将QListWidget中的选定项以字符串格式保存到单个字段中的QtSql表中(将列表项转换为字符串“绿色、绿色葡萄、橙色”)。 但同时我想更改所选项目并从QListWidget更新项目的字符串数据。如何做。是否可能。或者,如果有其他解决方案,请告诉我。 下面是示例代码:Python 如何使用QDataWidgetMapper从QListWidget编辑字符串作为项目,python,python-3.x,pyqt5,qsqltablemodel,qdatawidgetmapper,Python,Python 3.x,Pyqt5,Qsqltablemodel,Qdatawidgetmapper,我正在使用QListWidget、QSqlTableModel、QtableView和QDataWidgetMapper。QListWidget是ItemIsUserCheckable。 我能够将QListWidget中的选定项以字符串格式保存到单个字段中的QtSql表中(将列表项转换为字符串“绿色、绿色葡萄、橙色”)。 但同时我想更改所选项目并从QListWidget更新项目的字符串数据。如何做。是否可能。或者,如果有其他解决方案,请告诉我。 下面是示例代码: from PyQt5 impor
from PyQt5 import QtCore, QtGui, QtWidgets, QtSql
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(391, 496)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.listWidget = QtWidgets.QListWidget(self.centralwidget)
self.listWidget.setGeometry(QtCore.QRect(9, 9, 373, 188))
self.listWidget.setObjectName("listWidget")
self.save_btn = QtWidgets.QPushButton(self.centralwidget)
self.save_btn.setGeometry(QtCore.QRect(100, 230, 75, 23))
self.save_btn.setObjectName("save_btn")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(9, 203, 27, 16))
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(56, 203, 181, 20))
self.lineEdit.setObjectName("lineEdit")
self.update_btn = QtWidgets.QPushButton(self.centralwidget)
self.update_btn.setGeometry(QtCore.QRect(293, 229, 75, 23))
self.update_btn.setObjectName("update_btn")
self.edit_btn = QtWidgets.QPushButton(self.centralwidget)
self.edit_btn.setGeometry(QtCore.QRect(199, 229, 75, 23))
self.edit_btn.setObjectName("edit_btn")
self.tableView = QtWidgets.QTableView(self.centralwidget)
self.tableView.setGeometry(QtCore.QRect(9, 258, 373, 188))
self.tableView.setObjectName("tableView")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 391, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("fruites.db")
if db.open():
if db.open():
query = QSqlQuery()
query.exec_("""CREATE TABLE IF NOT EXISTS store(name TEXT, items TEXT)""")
self.store_model = QtSql.QSqlTableModel()
self.store_model.setTable("store")
self.store_model.select()
self.tableView.setModel(self.store_model)
list_ = ["Green", "Green Apple","Green Grapes", "Bananas", "Oranges"]
list_ = dict.fromkeys(list_, 0)
for i in list_:
item = QtWidgets.QListWidgetItem(i)
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setCheckState(QtCore.Qt.Unchecked)
self.listWidget.addItem(item)
self.save_btn.clicked.connect(self.save_item)
self.edit_btn.clicked.connect(self.edit_item)
self.update_btn.clicked.connect(self.submit_item)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.save_btn.setText(_translate("MainWindow", "Save"))
self.label.setText(_translate("MainWindow", "Name"))
self.update_btn.setText(_translate("MainWindow", "Update"))
self.edit_btn.setText(_translate("MainWindow", "Edit"))
def save_item(self):
name = self.lineEdit.text()
strng = ''
checked = []
for row in range(self.listWidget.count()):
item = self.listWidget.item(row)
if item.checkState():
checked.append(item)
strng = ", " .join(i.text() for i in checked)
r = self.store_model.record()
r.setValue("name", name)
r.setValue("items", strng)
self.store_model.insertRecord(-1, r)
self.store_model.select()
self.lineEdit.clear()
for i in range(self.listWidget.count()):
item = self.listWidget.item(i)
item.setCheckState(QtCore.Qt.Unchecked)
def edit_item(self):
selected = self.tableView.selectedIndexes()
if not self.store_model.rowCount():
return
index = self.tableView.currentIndex()
if index.isValid():
row = index.row()
else:
row = 0
self.store_mapper = QtWidgets.QDataWidgetMapper()
self.store_mapper.setSubmitPolicy(QtWidgets.QDataWidgetMapper.ManualSubmit)
self.store_mapper.setModel(self.tableView.model())
self.store_mapper.addMapping(self.lineEdit, 0)
self.store_mapper.addMapping(self.listWidget, 1)
self.store_mapper.setCurrentIndex(row)
def submit_item(self):
self.store_mapper.submit()
self.lineEdit.clear()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
为什么不将项目作为单个元素存储在SQL数据库中?这样不仅效率更高,而且可以让您轻松地执行所需操作。这并不意味着一旦您从数据库检索到数据,您就无法将其全部显示在一起,如果您想…@Isma。如何作为单个元素存储。您能给我举个例子吗。@伊斯玛,你能帮我吗。