|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
昨天发帖学习了委托,实验了以后实在是写不出来,老报错。想花钱请人帮忙,我自己顺便再跟着代码学一下
需求:
点修改按钮,TableView,第1,2列可编辑 (已实现)
双击price后,price清空,输入金额,sql会匹配,有返回值。就把返回值传给ComboBox,并将ComboBox显示在【挂号等级type】列。(未实现)
无返回值,则提示“没有价格为{price}的号”(已实现)
目前未完成的代码如下:
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
import sys
import Dbconnect
import MenuWindow
import CliPriceModifyWindow
class MenuWindow(MenuWindow.Ui_MainWindow,QMainWindow):
def __init__(self):
super(MenuWindow, self).__init__()
self.setupUi(self)
#定义QAction触发逻辑
self.clipricemodi_window = CliPriceModifyWindow()
self.actprice.triggered.connect(self.actprice_open)
self.mExit.aboutToShow.connect(sys.exit)
def actprice_open(self):
a = self.windowTitle()
if (a.split()[2] == '门诊办'):
self.clipricemodi_window.show()
else:
QMessageBox.critical(self, '没有操作权限', '您不是门诊办人员!')
#重写ComboBox委托
class ComboBoxDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
super(ComboBoxDelegate, self).__init__(parent)
def createEditor(self, parent, option, index):
editor = QComboBox(parent)
return editor
def setEditorData(self, editor, index):
# 这个函数用来设置编辑器的数据
price = index.model().data(index, Qt.ItemDataRole.DisplayRole)
sqlprice = "SELECT C.CLINIC_TYPE FROM (SELECT A.CLINIC_TYPE,SUM(B.PRICE) AS PRICE " \
"FROM CLINIC_TYPE_SETTING A,CURRENT_PRICE_LIST B " \
"WHERE A.PRICE_ITEM=B.ITEM_CODE GROUP BY A.CLINIC_TYPE) C " \
"WHERE C.PRICE='{price}'".format(price=price)
Dbconnect.cursor.execute(sqlprice)
sqlprice_result = Dbconnect.cursor.fetchall()
# 添加到ComboBox中
for i in sqlprice_result:
editor.addItem(str(i))
# 设置当前选中的项
editor.setCurrentIndex(editor.findText(price))
def setModelData(self, editor, model, index):
# 当编辑器关闭时,将编辑器的数据写入模型
value = editor.currentText()
model.setData(index, value, Qt.EditRole)
#触发事件:【价格price】变化,【挂号等级type】同步更新并传入ComboBox,类似触发器
def onDataChanged(self, index):
pass
这一块还没写,不会写
#门诊办专区号表价格修改
class CliPriceModifyWindow(CliPriceModifyWindow.Ui_Form,QWidget):
def __init__(self):
super(CliPriceModifyWindow, self).__init__()
self.setupUi(self)
self.pBtnQuery.clicked.connect(self.cliprice_query)
self.pBtnModify.clicked.connect(self.cliprice_modify)
self.pBtnSave.clicked.connect(self.cliprice_save)
self.pBtnReset.clicked.connect(self.cliprice_reset)
# 号表查询 (此部分已正常实现)
def cliprice_query(self):
# 通过号表查询
cliniclabel = self.lineEditClinic.text()
# 查询明细,返回结果
sql = "SELECT C.PRICE,A.CLINIC_TYPE,A.CLINIC_LABEL,B.DEPT_NAME,A.SHBLX,A.CLINIC_POSITION " \
"FROM CLINIC_INDEX A,DEPT_DICT B, " \
"(SELECT A.CLINIC_TYPE,SUM(B.PRICE) AS PRICE FROM CLINIC_TYPE_SETTING A,CURRENT_PRICE_LIST B " \
"WHERE A.PRICE_ITEM=B.ITEM_CODE GROUP BY A.CLINIC_TYPE) C " \
"WHERE A.CLINIC_DEPT=B.DEPT_CODE AND A.CLINIC_TYPE=C.CLINIC_TYPE " \
"AND A.CLINIC_DEPT LIKE '01%' " \
"AND A.CLINIC_LABEL LIKE '%{cliniclabel}%' " \
"ORDER BY A.CLINIC_LABEL".format(cliniclabel=cliniclabel)
Dbconnect.cursor.execute(sql)
sql_result = Dbconnect.cursor.fetchall()
# 创建QStandardItemModel实例
model = QStandardItemModel()
# 设置此模型的列标题
model.setHorizontalHeaderLabels(['价格', '挂号等级', '号别', '科室', '号别类型', '楼层'])
# 填充单元格数据
row = len(sql_result)
column = model.columnCount()
for i in range(row):
for j in range(column):
item = QStandardItem(str(sql_result[i][j]))
model.setItem(i, j, item)
self.tableView.setModel(model)
# 框体不可编辑
self.tableView.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
self.tableView.show()
#点击修改按钮,想实现的modify函数,tableview的【价格price】变化,【挂号等级type】同步更新并传入ComboBox
def cliprice_modify(self):
# 定位到【价格】列
self.tableView.selectColumn(0)
self.tableView.setSelectionBehavior(QAbstractItemView.SelectColumns)
# 设置QTableView单列可编辑
#第0列price可编辑
delegate = self.tableView.setEditTriggers(QAbstractItemView.EditTrigger.DoubleClicked)
self.tableView.setItemDelegateForColumn(0, delegate)
#第1列type可编辑
delegate2 = ComboBoxDelegate(self.tableView)
self.tableView.setItemDelegateForColumn(0, delegate2)
# 信号槽连接
model.dataChanged.connect(self.onDataChanged)
第一次请人帮忙,价格暂定50-100左右,如果可以发咸鱼,我去拍。价格不对也请指正 |
|