基于PyQt5的数据库可视化操作界面
2017-12-10 22:51
483 查看
前言
这是我python入门写的第一个项目,从前天晚上开始构思到今天做了第一个Release。这两天时间做了读了Qt库和pymssql的不少文档,边学边做写了一个可视化窗口实现数据库的操作。对PyQt的理解也就限于槽和信号沟通环节,pymssql主要是连接部分,并未过多涉及。内容为医院挂号系统,基本实现和练习了增删查改操作。介绍环境和配置上的操作以及搭建经验。PyQt5环境
参考PyQt5+python3+pycharm开发环境配置
集成了PyUIC和QtDeisgner。其中Designer跨语言,可以画一些简单的窗口和控件,输出.ui格式的文件,利用PyUIC转码为.py进行编辑。
PyQt库非常庞大,但我实际操作主要聚焦于控件的方法和定义。Qt的参考文档为C++环境,结合Pycharm自动补全基本可以避开转换的问题。
可以看到MainWindow代码很长,但大部分都是ui文件转码自动生成的(retranslateUi、setupUi),实际需要编写的就是逻辑和实现部分。
数据库连接
由于要求和环境的限制,我使用了SQL server 2012。MySQL等连接更为简洁方便。选用的库为pymssql,参考官方文档pymssql连接方面,需要首先登陆SQL Management Studio以管理员身份,然后设置中添加用于该项目连接的用户并给它授权。授权选项中我是全部勾选。
然后在其中建好设计好的两个表Doctor(用于检索医生)和Reg(用于前端操作)
注意设计时,将
varchar()数据类型更改为
nvarcahar,便于中文输入输出,同时连接时采用utf8字集:
server = "DESKTOP-9RUT87E" user = "Hospital" password = "123456" #print('Connecting to MSSQL...') conn = pymssql.connect(server, user, password, database="Hospital", charset='utf8')
之后阅读学习python中获取光标进行简单的数据库操作,即可实现在程序中实现数据库操作了,可以参考pymaasql的example。
Python编辑
本项目的意义在于简单的图像化操作代替数据库语言来实现数据的增删查改。考虑到绘制的问题,采用的简单的单一界面交互。对于多界面交互则需要绘制多个ui文件并在主程序中调用。- QtDesigner绘界面
非常方便地从左侧选取想要加入的元素,右侧属性栏也可以很好地自定义。对应生成了retranslateUi、setupUi中的代码,参考意义不大故移入附录。
- 转码为.py文件进行编辑
若搭建好开发环境,可直接从Pycharm中选择外部工具对ui文件转码,或是直接文件夹下shift+右键打开cmd调用pyuic转码。由于 QtDesigner提供的信号和槽连接非常简单而且多数需要实现的功能为SQL连接和操作,故需要自定信号和槽函数来实现这些按钮,所以转码后在IDE中进行编写。
熟悉了PyQT空间的语法和事件命名方式后,就可以轻松写出自定槽函数来接受按钮信号,同时获取和改变它们的各种状态。有空会写PyQt常见类的常见操作供交流。接下来就是由设计的界面、数据库结构设计交互逻辑并实现。
交互设计
窗口的交互分了7个按钮,交互逻辑如下查询在岗医生
根据科室和是否专家查询可用的医生
挂号
挂号需要提供个人信息,同时根据需要挂的科室,可执行上一步操作,选择合适的医生,填入医生号码进行挂号
截图:此时点击挂号即可完成挂号
其中1、2两步顺序随意。
查、删、改
根据提供的信息构建操作来实现,要注意到这些信息并不是全部需要,例如可以查询急症科的所有病人,也可以查询具体的某一个人
例:查询急症科的男病人
记录日志
简单的文件写入操作
保存的log:
实现
按钮槽函数的编写DB_开头的函数为自定槽函数,用于响应按钮点击的事件。同时需要一些自定辅助函数和全局变量用于系统状态的维护。
编写思路见代码注释。
引用并执行
编写HospitalRegSys.py作为主程序来调用编写好的ui转码而来的文件,实现主程序和UI界面代码的分离,也方便添加多个界面。
# HospitalRegSys0045.py from PyQt5 import QtCore, QtGui, QtWidgets from MainWindow import Ui_MainWindow import decimal class mwindow(QtWidgets.QMainWindow,Ui_MainWindow): def __init__(self): super(mwindow,self).__init__() self.setupUi(self) if __name__=="__main__": import sys app=QtWidgets.QApplication(sys.argv) mshow=mwindow() mshow.show() sys.exit(app.exec_())
主窗口代码
# PtQt5+MSSQL Hospital registrition Sys Manager
# C.H. 2017/12/08 First edition
# v0045 2017-12-10 20:02:37 End
# Release 1.2
# 1.2: 加入图标
# 中文注释重写 via Atom
from PyQt5 import QtCore, QtGui, QtWidgets
import pymssql
import time
i_id = int(time.time()%1000 - time.time()%100)*10 # 默认ID基于时间,并会自动在挂号后增加1
if i_id == 0:
i_id == 1000 # 避开ID等于0的情况
logmsg = '' # 用于保存Log
class Ui_MainWindow(object):
def setupUi(self, MainWindow): # 由UI文件自动生成,再将自定义connect信号
# Designer自动生成的代码,见附录
def Auto_ID(self): # ID自动编号
global i_id
self.lineEdit_ID.setText(str(i_id))
def DB_checkDoc(self): #查询符合条件的医生
global logmsg
logmsg = ''
strDp = self.comboBox_Dept.currentText()
if self.checkBox_isExpertRequired.isChecked():
isExpt = 1
isExptzh = '是'
else:
isExpt = 0
isExptzh = '否'
Msg = '科室: ' + strDp + ' 是否专家: ' + isExptzh + '\n查询到如下医生'
self.textBrowser.setText(Msg)
# 构造SQL语句
sql = "SELECT * FROM doctor where Dept ='" + strDp + "' and ON_DUTY = 'Y' and Expert = " + str(isExpt)
if strDp == '全部':
sql = "SELECT * FROM doctor where ON_DUTY = 'Y' and Expert = " + str(isExpt)
print(sql)
# 连接到数据库
server = "DESKTOP-9RUT87E" user = "Hospital" password = "123456" #print('Connecting to MSSQL...') conn = pymssql.connect(server, user, password, database="Hospital", charset='utf8')
print('Connected')
# 数据库操作
logmsg += Msg + "\n" + sql +"\n"
cursor = conn.cursor()
cursor.execute(sql)
row = cursor.fetchone()
while row:
print(row)
self.textBrowser.append("%s\t%s\t%8s\t%s" %(row[0], row[1], row[2], row[3]))
logmsg += "%s\t%s\t%8s\t%s\n" %(row[0], row[1], row[2], row[3])
row = cursor.fetchone()
conn.close()
self.statusbar.showMessage('查询成功', 1000)
def DB_insert(self): # 挂号操作
global i_id
global logmsg
logmsg = ''
flag = 0 # 用于处理异常
# 获取输入
strID = self.lineEdit_ID.text()
strName = self.lineEdit_Name.text()
strNo = self.lineEdit_no.text()
strAge = self.lineEdit_Age.text()
strDocNo = self.lineEdit_DocNo.text()
strDp = self.comboBox_Dept.currentText()
if self.radioButton_Man.isChecked():
strGender = '男'
i_iGender = 1
else:
strGender = '女'
i_iGender = 1
Msg = '正在挂号'
self.textBrowser.setText(Msg)
#连接到数据库
server = "DESKTOP-9RUT87E"
user = "Hospital"
password = "123456"
print('Connecting to MSSQL...')
conn = pymssql.connect(server, user, password, database="Hospital", charset='utf8')
print('Connected...')
cursor = conn.cursor()
# 构造SQL语句
sql = "insert into registration values('" + strID +"', '"+strName+"', '"+strNo+"', '"+strGender+"', '"+strAge+"', '"+strDp+"', '"+strDocNo+"')"
# print(sql)
logmsg += Msg +"\n" + sql
# 数据库操作
try:
cursor.execute(sql)
conn.commit()
conn.close()
self.textBrowser.append("\n挂号成功")
logmsg += "\n挂号成功"
self.textBrowser.append(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 清除填入的信息
self.lineEdit_Name.clear()
self.lineEdit_ID.clear()
self.lineEdit_DocNo.clear()
self.lineEdit_Age.clear()
self.lineEdit_no.clear()
self.radioButton_temp.s
18c3b
etChecked(1)
self.statusbar.showMessage('挂号成功', 2000)
i_id += 1
#self.lineEdit_ID.setText(str(i_id))
flag = 1
except Exception: #处理异常
if flag == 0:
self.textBrowser.append("挂号失败,检查输入")
self.statusbar.showMessage('插入异常', 2000)
logmsg += '插入异常'
def DB_inquire(self): #可选条件查询操作
global i_id
global logmsg
logmsg = '开始查询\n'
# 获取输入
strID = self.lineEdit_ID.text()
strName = self.lineEdit_Name.text()
strNo = self.lineEdit_no.text()
strAge = self.lineEdit_Age.text()
strDocNo = self.lineEdit_DocNo.text()
strDp = self.comboBox_Dept.currentText()
strGender = -1
if self.radioButton_Man.isChecked():
strGender = 1
strGenderzh = '男'
if self.radioButton_woman.isChecked():
strGender = 0
strGenderzh = '女'
# 构造SQL语句
sql_inquire = """SELECT registration.pti_ID,registration.pti_name, registration.pti_sex, registration.pti_age,doctor.doc_name,doctor.Dept
FROM registration,doctor
WHERE registration.doc_ID = doctor.doc_ID"""
isini = 1 # 用于判断是否第一个动态构造块,即是否需要加 and
# 对各项输入构造SQL语句
if strID == '': # ID
print('ID is empty')
pass
else:
if isini == 1:
sql_inquire += " and "
sql_inquire += "registration.pti_ID = '" + strID + "'"
isini = 1
if strName == '': # 姓名
print('Name is empty')
pass
else:
if isini == 1:
sql_inquire += " and "
sql_inquire += "registration.pti_name = '" + strName + "'"
isini = 1
if strNo == '': # 健康卡号
print('CardNo is empty')
pass
else:
if isini == 1:
sql_inquire += " and "
sql_inquire += "registration.pti_no = '" + strNo + "'"
isini = 1
if strGender == -1: # 性别
print('Gender is empty')
pass
else:
if isini == 1:
sql_inquire += " and "
sql_inquire += "registration.pti_sex = '" + strGenderzh+ "'"
isini = 1
if strAge == '': # 年龄
print('Age is empty')
pass
else:
if isini == 1:
sql_inquire += " and "
sql_inquire += "registration.pti_age = " + strAge
isini = 1
if strDocNo == '': # 医生
print('DocID is empty')
pass
else:
if isini == 1:
sql_inquire += " and "
sql_inquire += "registration.doc_ID = '" + strDocNo + "'"
isini = 1
if strDp == '全部': # 科室
print('Dept is All-included')
pass
else:
if isini == 1:
sql_inquire += " and "
sql_inquire += "registration.Dept = '" + strDp + "'"
isini = 1
# print(sql_inquire)
logmsg += sql_inquire +"\n"
flag = 0
# 数据库操作
try:
server = "DESKTOP-9RUT87E"
user = "Hospital"
password = "123456"
print('Connecting to MSSQL...')
conn = pymssql.connect(server, user, password, database="Hospital", charset='utf8')
print('Connected...')
cursor = conn.cursor()
cursor.execute(sql_inquire)
row = cursor.fetchone()
self.textBrowser.clear()
self.textBrowser.append("编号\t姓名\t性别 年龄 医生\t 科室")
while row:
print(row)
self.textBrowser.append(
"%s\t%s\t %s %-2d %+4s\t %s" % (row[0], row[1], row[2], row[3], row[4], row[5]))
logmsg += "%s\t%s\t %s %-2d %+4s\t %s" % (row[0], row[1], row[2], row[3], row[4], row[5]) + "\n"
row = cursor.fetchone()
conn.close()
# 用 \t 实现格式控制
self.statusbar.showMessage('查询成功', 1000)
# 清除输入的信息
self.lineEdit_Name.clear()
self.lineEdit_DocNo.clear()
self.lineEdit_Age.clear()
self.lineEdit_no.clear()
self.radioButton_temp.setChecked(1)
flag = 1
except Exception: # 处理异常
if flag == 0:
self.textBrowser.append("查询失败,检查输入")
logmsg += "查询失败,检查输入"
self.statusbar.showMessage('查询异常', 2000)
def DB_del(self): # 取消挂号
global i_id
global logmsg
logmsg = '开始删除\n'
flag = 0
strID = self.lineEdit_ID.text()
strNo = self.lineEdit_no.text()
# 构造SQL语句
sql_del = "delete from registration where "
if strID != '':
sql_del += "pti_ID = '" + strID +"'"
elif strNo !='':
sql_del += "pti_no = '" + strNo + "'"
# 连接数据库
server = "DESKTOP-9RUT87E" user = "Hospital" password = "123456" #print('Connecting to MSSQL...') conn = pymssql.connect(server, user, password, database="Hospital", charset='utf8')
print('Connected...')
#print(sql_del)
logmsg += sql_del +"\n"
# 数据库操作
cursor = conn.cursor()
try:
cursor.execute(sql_del)
conn.commit()
conn.close()
self.textBrowser.setText("\n取消挂号成功\n" + strID +" " + strNo +"项已删除")
logmsg += "\n取消挂号成功\n" + strID +" " + strNo +"项已删除"
self.textBrowser.append(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 清除填入的信息
self.lineEdit_ID.clear()
self.lineEdit_no.clear()
self.radioButton_temp.setChecked(1)
self.statusbar.showMessage('删除成功', 2000)
flag = 1
except Exception: #处理异常
if flag == 0:
self.textBrowser.append("取消失败,检查输入")
logmsg += "取消失败,检查输入"
self.statusbar.showMessage('删除异常', 2000)
def DB_update(self): #修改信息
global i_id
global logmsg
logmsg = "开始修改\n"
flag = 0
strID = self.lineEdit_ID.text()
# 获取输入
strName = self.lineEdit_Name.text()
strNo = self.lineEdit_no.text()
strAge = self.lineEdit_Age.text()
strDocNo = self.lineEdit_DocNo.text()
strDp = self.comboBox_Dept.currentText()
strGender = ''
if self.radioButton_Man.isChecked():
strGender = '男'
if self.radioButton_woman.isChecked():
strGender = '女'
if self.radioButton_temp.isChecked():
strGender = ''
# 构造SQL语句
sql_edit = "update registration set "
isini = 1 # 用于判断是否第一个动态构造块,即是否需要加 ','
if strName != '':
if isini == 0:
sql_edit +=", "
sql_edit += "pti_name = '"+ strName +"'"
isini = 0
if strNo != '':
if isini == 0:
sql_edit +=", "
sql_edit += "pti_no = '"+ strNo +"'"
isini = 0
if strGender != '':
if isini == 0:
sql_edit +=", "
sql_edit += "pti_sex = '"+ strGender +"'"
isini = 0
if strAge != '':
if isini == 0:
sql_edit +=", "
sql_edit += "pti_age = "+ strAge
isini = 0
if strDp != '全部':
if isini == 0:
sql_edit +=", "
sql_edit += "Dept = '"+ strDp +"'"
isini = 0
else:
self.textBrowser.append("请选择要更改的科室")
if strDocNo != '':
if isini == 0:
sql_edit +=", "
sql_edit += "doc_ID = '"+ strDocNo +"'"
isini = 0
sql_edit +=" where pti_ID = '" + strID +"'"
print(sql_edit)
logmsg += sql_edit
# 连接到数据库
server = "DESKTOP-9RUT87E"
user = "Hospital"
password = "123456"
print('Connecting to MSSQL...')
conn = pymssql.connect(server, user, password, database="Hospital", charset='utf8')
print('Connected...')
#数据库操作
cursor = conn.cursor()
try:
cursor.execute(sql_edit)
conn.commit()
conn.close()
self.textBrowser.append("\n修改成功, ID: " + strID + " 项已修改")
logmsg += "\n修改成功, ID: " + strID + " 项已修改"
self.textBrowser.append(
"%s\t%s\t %s %-2s %+4s\t %s" % (strID, strName, strGender, strAge, strDp, strDocNo))
self.textBrowser.append(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 清除填入的信息
self.lineEdit_Name.clear()
self.lineEdit_ID.clear()
self.lineEdit_DocNo.clear()
self.lineEdit_Age.clear()
self.lineEdit_no.clear()
self.radioButton_temp.setChecked(1)
self.statusbar.showMessage('修改成功', 2000)
flag = 1
except Exception: #处理异常
if flag == 0:
self.textBrowser.append("修改失败,检查输入")
logmsg += "修改失败,检查输入"
self.statusbar.showMessage('修改异常', 2000)
def FILE_savelog(self): #保存日志
fw = open('log.txt', 'a+') #追加模式打开log
global logmsg
fw.write("\n" +time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) + "\n"+ logmsg+ "\n")
fw.close()
self.statusbar.showMessage('保存成功', 5000)
def retranslateUi(self, MainWindow):
# Designer自动生成的代码,见附录
pyinstaller生成可执行文件
生成exe的时候遇到了很多困难,和python3.6环境以及pymssql、pyinstaller设置的参数有关。经过多次测试和参考官方文档,在cmd中执行程序,根据报错“没有找到模块XXX”,直接在主程序中引入该模块即可,即是import decimal # import的具体模块和报错缺少的模块有关
这个模块和_mssql有关,可见库和环境的不兼容性。
附录
数据库结构
retranslateUi、setupUi代码
只需编辑setupUi最后连接部分的信号,以实现按钮的功能。def setupUi(self, MainWindow): global i_id MainWindow.setObjectName("MainWindow") MainWindow.resize(938, 813) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.pushButton_Quit = QtWidgets.QPushButton(self.centralwidget) self.pushButton_Quit.setGeometry(QtCore.QRect(700, 690, 141, 61)) font = QtGui.QFont() font.setPointSize(12) self.pushButton_Quit.setFont(font) self.pushButton_Quit.setMouseTracking(False) self.pushButton_Quit.setAutoDefault(False) self.pushButton_Quit.setFlat(False) self.pushButton_Quit.setObjectName("pushButton_Quit") self.lineEdit_ID = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit_ID.setGeometry(QtCore.QRect(140, 290, 193, 41)) self.lineEdit_ID.setObjectName("lineEdit_ID") #self.lineEdit_ID.setText(str(i_id)) self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(40, 300, 81, 31)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(40, 357, 81, 31)) self.label_2.setObjectName("label_2") self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(10, 420, 121, 31)) self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(self.centralwidget) self.label_4.setGeometry(QtCore.QRect(40, 490, 81, 31)) self.label_4.setObjectName("label_4") self.label_5 = QtWidgets.QLabel(self.centralwidget) self.label_5.setGeometry(QtCore.QRect(40, 550, 81, 41)) self.label_5.setObjectName("label_5") self.checkBox_isExpertRequired = QtWidgets.QCheckBox(self.centralwidget) self.checkBox_isExpertRequired.setGeometry(QtCore.QRect(130, 100, 141, 41)) font = QtGui.QFont() font.setFamily("Agency FB") font.setPointSize(12) self.checkBox_isExpertRequired.setFont(font) self.checkBox_isExpertRequired.setTristate(False) self.checkBox_isExpertRequired.setObjectName("checkBox_isExpertRequired") self.label_6 = QtWidgets.QLabel(self.centralwidget) self.label_6.setGeometry(QtCore.QRect(70, 60, 81, 31)) self.label_6.setObjectName("label_6") self.pushButton_checkDocOnDuty = QtWidgets.QPushButton(self.centralwidget) self.pushButton_checkDocOnDuty.setGeometry(QtCore.QRect(110, 160, 161, 51)) self.pushButton_checkDocOnDuty.setMinimumSize(QtCore.QSize(0, 51)) font = QtGui.QFont() font.setPointSize(12) self.pushButton_checkDocOnDuty.setFont(font) self.pushButton_checkDocOnDuty.setMouseTracking(False) self.pushButton_checkDocOnDuty.setObjectName("pushButton_checkDocOnDuty") self.label_7 = QtWidgets.QLabel(self.centralwidget) self.label_7.setGeometry(QtCore.QRect(10, 630, 121, 41)) self.label_7.setObjectName("label_7") self.pushButton_Reg = QtWidgets.QPushButton(self.centralwidget) self.pushButton_Reg.setGeometry(QtCore.QRect(100, 700, 171, 71)) font = QtGui.QFont() font.setPointSize(13) self.pushButton_Reg.setFont(font) self.pushButton_Reg.setObjectName("pushButton_Reg") self.lineEdit_Name = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit_Name.setGeometry(QtCore.QRect(140, 353, 193, 41)) self.lineEdit_Name.setObjectName("lineEdit_Name") self.lineEdit_no = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit_no.setGeometry(QtCore.QRect(140, 410, 193, 41)) self.lineEdit_no.setObjectName("lineEdit_no") self.lineEdit_Age = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit_Age.setGeometry(QtCore.QRect(140, 550, 193, 41)) self.lineEdit_Age.setObjectName("lineEdit_Age") self.comboBox_Dept = QtWidgets.QComboBox(self.centralwidget) self.comboBox_Dept.setGeometry(QtCore.QRect(150, 50, 201, 41)) font = QtGui.QFont() font.setFamily("Agency FB") font.setPointSize(12) self.comboBox_Dept.setFont(font) self.comboBox_Dept.setObjectName("comboBox_Dept") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.comboBox_Dept.addItem("") self.commandLinkButton_AutoID = QtWidgets.QCommandLinkButton(self.centralwidget) self.commandLinkButton_AutoID.setGeometry(QtCore.QRect(330, 290, 91, 41)) font = QtGui.QFont() font.setFamily("Segoe UI") font.setPointSize(8) self.commandLinkButton_AutoID.setFont(font) icon = QtGui.QIcon.fromTheme("Cancel") self.commandLinkButton_AutoID.setIcon(icon) self.commandLinkButton_AutoID.setObjectName("commandLinkButton_AutoID") self.lineEdit_DocNo = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit_DocNo.setGeometry(QtCore.QRect(140, 630, 193, 41)) self.lineEdit_DocNo.setObjectName("lineEdit_DocNo") self.pushButton_Quest = QtWidgets.QPushButton(self.centralwidget) self.pushButton_Quest.setGeometry(QtCore.QRect(650, 380, 241, 71)) font = QtGui.QFont() font.setPointSize(14) self.pushButton_Quest.setFont(font) self.pushButton_Quest.setObjectName("pushButton_Quest") font = QtGui.QFont() font.setPointSize(12) self.radioButton_Man = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_Man.setGeometry(QtCore.QRect(140, 490, 61, 22)) self.radioButton_Man.setObjectName("radioButton_Man") self.radioButton_Man.setFont(font) self.radioButton_woman = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_woman.setGeometry(QtCore.QRect(230, 490, 71, 22)) self.radioButton_woman.setObjectName("radioButton_woman") self.radioButton_woman.setFont(font) self.radioButton_temp = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_temp.setGeometry(QtCore.QRect(270, 490, 71, 22)) self.radioButton_temp.setObjectName("radioButton_temp") self.radioButton_temp.setVisible(0) self.label_8 = QtWidgets.QLabel(self.centralwidget) self.label_8.setGeometry(QtCore.QRect(470, 390, 111, 61)) self.label_8.setObjectName("label_8") self.pushButton_Del = QtWidgets.QPushButton(self.centralwidget) self.pushButton_Del.setGeometry(QtCore.QRect(650, 480, 241, 71)) font = QtGui.QFont() font.setPointSize(14) self.pushButton_Del.setFont(font) self.pushButton_Del.setObjectName("pushButton_Del") self.label_9 = QtWidgets.QLabel(self.centralwidget) self.label_9.setGeometry(QtCore.QRect(470, 490, 111, 61)) self.label_9.setObjectName("label_9") self.pushButton_Edit = QtWidgets.QPushButton(self.centralwidget) self.pushButton_Edit.setGeometry(QtCore.QRect(650, 580, 241, 71)) font = QtGui.QFont() font.setPointSize(14) self.pushButton_Edit.setFont(font) self.pushButton_Edit.setObjectName("pushButton_Edit") self.label_10 = QtWidgets.QLabel(self.centralwidget) self.label_10.setGeometry(QtCore.QRect(460, 590, 141, 61)) self.label_10.setObjectName("label_10") self.pushButton_SaveLog = QtWidgets.QPushButton(self.centralwidget) self.pushButton_SaveLog.setGeometry(QtCore.QRect(520, 690, 141, 61)) font = QtGui.QFont() font.setPointSize(12) self.pushButton_SaveLog.setFont(font) self.pushButton_SaveLog.setMouseTracking(False) self.pushButton_SaveLog.setAutoDefault(False) self.pushButton_SaveLog.setFlat(False) self.pushButton_SaveLog.setObjectName("pushButton_SaveLog") self.line = QtWidgets.QFrame(self.centralwidget) self.line.setGeometry(QtCore.QRect(40, 240, 321, 20)) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.line_2 = QtWidgets.QFrame(self.centralwidget) self.line_2.setGeometry(QtCore.QRect(400, 380, 21, 391)) self.line_2.setFrameShape(QtWidgets.QFrame.VLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) self.textBrowser.setGeometry(QtCore.QRect(380, 40, 541, 300)) self.textBrowser.setObjectName("textBrowser") #self.textBrowser.setText('HooH') MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.setWindowIcon(QtGui.QIcon(r'icon.png')) self.retranslateUi(MainWindow) self.pushButton_SaveLog.clicked.connect(self.FILE_savelog) self.pushButton_checkDocOnDuty.clicked.connect(self.DB_checkDoc) self.pushButton_Quit.clicked.connect(MainWindow.close) self.pushButton_Reg.clicked.connect(self.DB_insert) self.pushButton_Quest.clicked.connect(self.DB_inquire) self.pushButton_Del.clicked.connect(self.DB_del) self.pushButton_Edit.clicked.connect(self.DB_update) self.commandLinkButton_AutoID.clicked.connect(self.Auto_ID) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): #UI文件自生成的部分,用html语言可以自定义显示 _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "挂号系统")) self.pushButton_Quit.setText(_translate("MainWindow", "退出")) self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:14pt;\">ID</span></p></body></html>")) self.label_2.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:14pt;\">姓名</span></p></body></html>")) self.label_3.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:14pt;\">健康卡号</span></p></body></html>")) self.label_4.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:14pt;\">性别</span></p></body></html>")) self.label_5.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:14pt;\">年龄</span></p></body></html>")) self.checkBox_isExpertRequired.setText(_translate("MainWindow", "是否专家")) self.label_6.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:14pt;\">科室</span></p></body></html>")) self.pushButton_checkDocOnDuty.setText(_translate("MainWindow", "查询在岗医生")) self.label_7.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:14pt;\">医师号</span></p></body></html>")) self.pushButton_Reg.setText(_translate("MainWindow", "挂号")) self.pushButton_Quest.setText(_translate("MainWindow", "查询")) self.radioButton_Man.setText(_translate("MainWindow", "男")) self.radioButton_woman.setText(_translate("MainWindow", "女")) self.label_8.setText(_translate("MainWindow", "<html><head/><body><p>请在左侧填入</p><p>条件进行检索</p></body></html>")) self.pushButton_Del.setText(_translate("MainWindow", "取消挂号")) self.label_9.setText(_translate("MainWindow", "<html><head/><body><p>请在左侧输入</p><p>ID或健康卡号</p></body></html>")) self.pushButton_Edit.setText(_translate("MainWindow", "修改信息")) self.label_10.setText(_translate("MainWindow", "<html><head/><body><p>请在左侧输入ID</p><p>和要修改的信息</p></body></html>")) self.pushButton_SaveLog.setText(_translate("MainWindow", "保存记录")) self.comboBox_Dept.setItemText(0, _translate("MainWindow", "全部")) self.comboBox_Dept.setItemText(1, _translate("MainWindow", "急症科")) self.comboBox_Dept.setItemText(2, _translate("MainWindow", "妇产科")) self.comboBox_Dept.setItemText(3, _translate("MainWindow", "肿瘤科")) self.comboBox_Dept.setItemText(4, _translate("MainWindow", "普外科")) self.comboBox_Dept.setItemText(5, _translate("MainWindow", "泌尿外科")) self.comboBox_Dept.setItemText(6, _translate("MainWindow", "儿科")) self.comboBox_Dept.setItemText(7, _translate("MainWindow", "五官科")) self.comboBox_Dept.setItemText(8, _translate("MainWindow", "中医科")) self.comboBox_Dept.setItemText(9, _translate("MainWindow", "放射科")) self.comboBox_Dept.setItemText(10, _translate("MainWindow", "麻醉医学科")) self.comboBox_Dept.setItemText(11, _translate("MainWindow", "神经内科")) self.commandLinkButton_AutoID.setText(_translate("MainWindow", "自动"))
Ref
PyQt5 Reference Guidepymssql
相关文章推荐
- 总结基于mysql的jdbc对数据库的操作(增删查改,批量操作,事务)
- 数据库图形化操作界面源码--MySQL菜鸟入门指南4:图形界面
- mysql 可视化界面操作指令
- PHP基于单例模式实现的数据库操作基类
- VS2010 数据库操作(基于Access 2013)
- iOS的数据库相关操作(基于fmdb)
- android数据库sqlite可视化操作
- 基于C#分步式聊天系统的在线视频直播系统 之 数据库操作基类 - 通用于Windows及Linux的Mono环境
- Deepin 15.5 使用DataGrip可视化操作Oracle数据库
- 第109讲: Spark Streaming电商广告点击综合案例动态黑名单基于数据库MySQL的真正操作代码实战
- 自定义封装简单的基于FMDB以及数据model的数据库操作
- 基于C API的SQLite3基本数据库操作
- kubernetes可视化搭建集群,web界面一键操作
- sqlite数据库的基本操作基于FMDatabase(创建数据库,创建表,对标进行增,删,改,查)
- redis可视化界面的操作【二十一】
- 如何在centOS等一些linux系统下安装oracle sqldeveloper图形化数据库操作界面
- 第54课作业实战成功:用phpMyAdmin等数据库可视化软件操作MySQL,并且通过远程操作MySQL;
- 远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)
- 【转】MAQETTA: 基于HTML5的开源可视化界面设计工具
- 基于C API的SQLite3基本数据库操作