请选择 进入手机版 | 继续访问电脑版

pyside2入门–药品管理ui,从搭建环境到代码编写,调试,实验结果

[复制链接]
奋斗在韩 发表于 2021-1-3 12:14:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
pyside2入门–药品管理ui,从搭建情况到代码编写,调试,实验效果

本人新手,刚入门python GUI,不敷之处多多指教。
一、搭建情况,如下
  1. from PySide2.QtWidgets import QApplication, QMessageBox,QTreeWidgetItemfrom PySide2.QtUiTools import QUiLoaderimport MySQLdbimport random
复制代码
1、首先是pyside2
先pip install wheel
再pip insatll pyside2
找到内里的designer.exe
注意:第一次运行步调的时候出现了一个no platform的错误(就是pyside2不能直接调用)
网上查找了一下。有两个办理方法:
1)把platform文件移到与designer.exe同级。
2)删除情况变量。
。。。我其时似乎是放到同级以后,再重启电脑一次可以运行了。
2、安装MySQLdb
python3装 pip install mysqlclient
一般装不上,得手动下一个whl文件。
按这个这个博主的方法
注意:然而我下了以后照旧装不上,显示whl文件is not a valid file,重启电脑以后安装上了。(挺迷的,不知道为什么)
  1. import MySQLdb#没报错就乐成了
复制代码
数据库可视化用的phpstudy+Navicat for MySQL
就比力玄学,学网络安全装的应用,拿去毗连数据库,就这样把2333
二、实验效果
0、加两行代码,换个图标。
  1. from PySide2.QtGui import  QIconapp.setWindowIcon(QIcon('logo.png'))
复制代码

1、注册
2、查询

3、导入数据库
4、注册任务,左边树控件,右边列控件。将右边的任务注册已往,形成一颗树。
5、给药品分发一个key,hash的时候用
6、把任务移返来

三、编写代码
这里只举行一部分讲授了。 代码先容和ui编写
1、代码先容
可以再python3.vip内里学一学入门的,讲的不错。
注:数据库暗码打的‘。。。’
1)init 动态导入ui文件 加上创建数据表
  1. def __init__(self):        # 从文件中加载UI界说        # 从 UI 界说中动态 创建一个相应的窗口对象        # 注意:内里的控件对象也成为窗口对象的属性了        # 好比 self.ui.button , self.ui.textEdit        self.ui = QUiLoader().load('药品管理.ui')        self.ui.pushButton_2.clicked.connect(self.handleall)        self.ui.pushButton_3.clicked.connect(self.query)        self.ui.pushButton_5.clicked.connect(self.daoru)        self.ui.pushButton.clicked.connect(self.zhucerenwu)        self.ui.pushButton_4.clicked.connect(self.yichurenwu)        self.ui.pushButton_6.clicked.connect(self.fenfa)        self.ui.pushButton_7.clicked.connect(self.sort)
复制代码
  1. import MySQLdb#创建数据表# 打开数据库毗连db = MySQLdb.connect("localhost", "root", "。。。","test", charset='utf8' )# 使用cursor()方法获取操纵游标 cursor = db.cursor()# SQL 插入语句# SQL 查询语句cursor.execute("DROP TABLE IF EXISTS yaopin")# 创建数据表SQL语句sql = """CREATE TABLE YAOPIN (         ID  CHAR(20) PRIMARY KEY,         NAME  CHAR(20),         OFFICE  CHAR(20),         MANAGER  CHAR(20),         IP  CHAR(20)          )"""cursor.execute(sql)# 关闭数据库毗连db.close()
复制代码
2)handleall方法,根据自己情况设置输入限制。我这边是handleid函数和handleother函数处置处罚,判断正确返回真,错误返回假,并消息提示。只有一直真才气继续执行。
  1. def handleall(self):        x1=self.ui.lineEdit.text()#id        if self.handleid(x1):            x2=self.ui.lineEdit_2.text()#name            if self.handleother(x2):                x3=self.ui.lineEdit_6.text()#office                if self.handleother(x3):                    x4=self.ui.lineEdit_4.text()#manager                    if self.handleother(x4):                        x5=self.ui.lineEdit_5.text()#ip                        if self.handleother(x5):                             db = MySQLdb.connect("localhost", "root", "。。。","test", charset='utf8' )                            # 使用cursor()方法获取操纵游标                             cursor = db.cursor()                            # SQL 插入语句                            sql = "INSERT INTO yaopin(ID, \                                   NAME,OFFICE,MANAGER,IP) \                                   VALUES ('%s', '%s', '%s', '%s', '%s' )" % \                                   (x1,x2,x3,x4,x5)                            try:                               # 执行sql语句                               cursor.execute(sql)                               # 提交到数据库执行                               db.commit()                               QMessageBox.about(self.ui,'正常','注册乐成')                               #self.ui.lineEdit.clear()                               self.ui.lineEdit_2.clear()                               self.ui.lineEdit_4.clear()                               self.ui.lineEdit_5.clear()                               self.ui.lineEdit_6.clear()                            except Exception as e:                               # Rollback in case there is any error                               db.rollback()                               print('错误:',e)                               QMessageBox.critical(self.ui,'错误',f'错误范例:{e}')                                                           # 关闭数据库毗连                            db.close()  
复制代码
3)buttom-query
  1. def query(self):        x1=self.ui.lineEdit_3.text()        if self.handleid(x1):            db = MySQLdb.connect("localhost", "root", "。。。","test", charset='utf8' )            cursor = db.cursor()            sql = "SELECT * FROM yaopin where ID='%s'" %(x1)            try:               cursor.execute(sql)               i=cursor.fetchall()               i=i[0]               QMessageBox.about(self.ui,'返回数据',f'id:{i[0]}\nname:{i[1]}\noffice:{i[2]}\nmanager:{i[3]}\nip:{i[4]}')               self.ui.lineEdit_3.clear()            except:               QMessageBox.about(self.ui,'提示','数据库中无该数据')            db.close()
复制代码
4)buttom-daoru
  1. def daoru(self):        self.ui.listWidget.clear()        db = MySQLdb.connect("localhost", "root", "。。。","test", charset='utf8' )        cursor = db.cursor()        sql = "SELECT * FROM yaopin "        try:            cursor.execute(sql)            data4=cursor.fetchall()            for i in data4:                self.ui.listWidget.addItem(f'{i[0]}:{i[1]}')                #只导入了1.2项        except Exception as e:            print('错误:',e)        db.close()
复制代码
5)buttom-注册任务
  1. def zhucerenwu(self):        data1=self.ui.treeWidget.selectedItems()#选中一列或多列        data2=self.ui.listWidget.selectedItems()#选中一列或多列        for i in data2:#先索引值,再切断毗连,再移除            self.ui.listWidget.removeItemWidget(self.ui.listWidget.takeItem(self.ui.listWidget.row(i)))        if data1==[]:#开始为空,自建根节点            root = QTreeWidgetItem(self.ui.treeWidget)            root.setText(0,f'{data2[0].text()}')        else:#不为空,在指定节点下填入所有任务            for i in data2:                child=QTreeWidgetItem(data1[0])                child.setText(0,f'{i.text()}')                #树控件的用法!!!!0在外面指定。0就是树控件第一列。                #i.text()是列表控件的内容,直接调用就行。
复制代码
6)buttom-移除任务
  1. def yichurenwu(self):        root= QTreeWidgetItem(self.ui.treeWidget)#实例一个根,反面会删除        data3=self.ui.treeWidget.selectedItems()        for i in data3:            root.removeChild(i)#选择的全部删除            #根节点删除,下面的叶节点会自动删除            if i.text(0)[:3]!='key':#不是key的才气转已往                self.ui.listWidget.addItem(f'{i.text(0)}')                #i.text(0)是树控件的内容                #树表控件用法,0在内里指定,代表选中的树控件第一列!!!        root.removeChild(root)#把自己删除
复制代码
7)buttom-fenfa
  1. def fenfa(self):        data4=self.ui.treeWidget.selectedItems()        data4=data4[0]        if data4.child(0)==None:#子节点空            QMessageBox.about(self.ui,'提示','该任务无子任务')        else:            i=0            while data4.child(i)!=None:#所有子节点遍历添加                ch=QTreeWidgetItem(data4.child(i))                ch.setText(0,f'key={random.randint(100000,999999)}')                i+=1
复制代码
8)buttom-sort
  1. def sort(self):        self.ui.listWidget.sortItems()#列表类的排序方法
复制代码
注意:
1)两个控件删除方法不一样。树建根再删除根,列表索引断开接洽再删除。
2)写sql语句,%s要写成‘%s’。
3)索引树控件,判断为不为空的几个情况。
4)树控件文本是i.text(0),选中的第一列。列控件文本直接i.text(),不消选。
2、ui先容
刚入门,加上美工一般,勿喷。
总的来说就4步,鉴戒白月黑羽老师的总结
第一步:建好所有小控件
第二步:小控件内部布局毗连好
第三步:小控件组成的整体布局毗连好
第四步:美工调解,可以用css和调解strength



来源:https://blog.csdn.net/weixin_45005570/article/details/112058256
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )