问题描述
我试图将Valuse作为带有前缀和后缀的文本存储到Qtsql表中,并使用QDataWidgetMapper,两个QDoubleSpinBox和一个QSpinBox进行修改。一个QDoubleSpinBox,其前缀为“价格0.00”,一个QSpinBox后缀为“ 0天”。我想将值“文本”存储到Qtsql表中的“文本” formate中。使用QsqlTableModel查看db数据。 我通过添加ItemDelegate类来编辑我的代码。缺少我无法从QDoubleSpinBox.valueFromText获得的东西。如何将字符串转换为带有前缀和后缀的值。
from PyQt5 import QtCore,QtGui,QtWidgets,Qtsql
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.Qtsql import *
class ItemDelegate(QtWidgets.QItemDelegate):
def setEditorData(self,editor,index):
if index.column() == 0 and isinstance(editor,QtWidgets.QDoubleSpinBox):
text = index.data()
t = QtWidgets.QDoubleSpinBox.valueFromText(text)
editor.setValue(t)
return
if index.column() == 1 and isinstance(editor,QtWidgets.QSpinBox):
text = index.data()
t = QtWidgets.QDoubleSpinBox.valueFromText(text)
editor.setValue(t)
return
def setModelData(self,model,QtWidgets.QDoubleSpinBox):
text = editor.text()
model.setData(index,text)
return
if index.column() == 1 and isinstance(editor,QtWidgets.QSpinBox):
text = editor.text()
model.setData(index,text)
return
super().setModelData(editor,index)
class Ui_MainWindow(object):
def setupUi(self,MainWindow):
MainWindow.setobjectName("MainWindow")
MainWindow.resize(711,395)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setobjectName("centralwidget")
self.gridLayout = QtWidgets.qgridLayout(self.centralwidget)
self.gridLayout.setobjectName("gridLayout")
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setobjectName("label_6")
self.gridLayout.addWidget(self.label_6,1,1)
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setobjectName("label_5")
self.gridLayout.addWidget(self.label_5,1)
self.label_7 = QtWidgets.QLabel(self.centralwidget)
self.label_7.setobjectName("label_7")
self.gridLayout.addWidget(self.label_7,2,1)
self.price_doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.price_doubleSpinBox.setDecimals(1)
self.price_doubleSpinBox.setMaximum(9.9)
self.price_doubleSpinBox.setobjectName("price_doubleSpinBox")
self.gridLayout.addWidget(self.price_doubleSpinBox,1)
self.days_spinBox = QtWidgets.QSpinBox(self.centralwidget)
self.days_spinBox.setPrefix("")
self.days_spinBox.setobjectName("days_spinBox")
self.gridLayout.addWidget(self.days_spinBox,1)
self.rating_doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.rating_doubleSpinBox.setDecimals(1)
self.rating_doubleSpinBox.setMaximum(9.9)
self.rating_doubleSpinBox.setobjectName("rating_doubleSpinBox")
self.gridLayout.addWidget(self.rating_doubleSpinBox,1)
self.tableView = QtWidgets.QTableView(self.centralwidget)
self.tableView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.tableView.setobjectName("tableView")
self.gridLayout.addWidget(self.tableView,3)
self.save_btn = QtWidgets.QPushButton(self.centralwidget)
self.save_btn.setobjectName("save_btn")
self.gridLayout.addWidget(self.save_btn,3,1)
self.edit_btn = QtWidgets.QPushButton(self.centralwidget)
self.edit_btn.setobjectName("edit_btn")
self.gridLayout.addWidget(self.edit_btn,1)
self.update_btn = QtWidgets.QPushButton(self.centralwidget)
self.update_btn.setobjectName("update_btn")
self.gridLayout.addWidget(self.update_btn,1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0,711,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("price.db")
if db.open():
self.query = QsqlQuery()
self.query.exec_("CREATE TABLE IF NOT EXISTS details(price TEXT,days TEXT,rating TEXT)")
self.price_model = Qtsql.QsqlTableModel()
self.price_model.setTable("details")
self.price_model.select()
self.tableView.setModel(self.price_model)
self.save_btn.clicked.connect(self.details_save)
self.edit_btn.clicked.connect(self.details_edit)
self.update_btn.clicked.connect(self.submit_details)
def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setwindowTitle(_translate("MainWindow","MainWindow"))
self.label_6.setText(_translate("MainWindow","Price"))
self.label_5.setText(_translate("MainWindow","Days"))
self.label_7.setText(_translate("MainWindow","rating"))
self.price_doubleSpinBox.setPrefix(_translate("MainWindow","Price "))
self.days_spinBox.setSuffix(_translate("MainWindow"," Days"))
self.save_btn.setText(_translate("MainWindow","Save"))
self.edit_btn.setText(_translate("MainWindow","Edit"))
self.update_btn.setText(_translate("MainWindow","Update"))
def details_save(self):
a = self.price_doubleSpinBox.text()
b = self.days_spinBox.text()
c = self.rating_doubleSpinBox.text()
r = self.price_model.record()
r.setValue("price",a)
r.setValue("days",b)
r.setValue("rating",c)
self.price_model.insertRecord(-1,r)
self.price_model.select()
def details_edit(self):
selected = self.tableView.selectedindexes()
if not self.price_model.rowCount():
return
index = self.tableView.currentIndex()
if index.isValid():
row = index.row()
else:
row = 0
self.details_mapper = QtWidgets.QDataWidgetMapper()
delegate = ItemDelegate(self.details_mapper)
self.details_mapper.setItemDelegate(delegate)
self.details_mapper.setSubmitPolicy(QtWidgets.QDataWidgetMapper.ManualSubmit)
self.details_mapper.setModel(self.tableView.model())
self.details_mapper.addMapping(self.price_doubleSpinBox,0)
self.details_mapper.addMapping(self.days_spinBox,1)
self.details_mapper.addMapping(self.rating_doubleSpinBox,2)
self.details_mapper.setCurrentIndex(row)
def submit_details(self):
self.details_mapper.submit()
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_())
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)