版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元10基于GUI框架的图形界面设计与网络爬虫应用【任务10-1】使用wxPython框架结合sqlite3数据库设计图形用户登录界面【任务描述】(1)在PyCharm集成开发环境中创建项目Unit10。(2)在项目Unit10创建Python程序文件“10-1Init.py”和“10-1.py”。(3)使用wxPython框架结合sqlite3数据库设计图形用户登录界面,实现用户登录功能。即分别为【确定】和【取消】按钮添加单击事件,当用户输入用户名和密码后,单击【确定】按钮,首先判断用户名或密码是否为空,如果为空则弹出“提示信息对话框”,显示“用户名或密码不能为空”的信息;如果输入的用户名和密码正确,则弹出“提示信息对话框”显示“登录成功”,在“提示信息对话框”中单击【确认】按钮后,打开【显示图书数据】窗口;否则出现“用户名和密码不匹配”的信息。当单击【取消】按钮时,清空用户输入的用户名和密码,关闭登录窗口。【任务实施】1.创建PyCharm项目Unit10成功启动PyCharm后,在指定位置“D:\PycharmProject\”,创建PyCharm项目Unit10。2.创建Python程序文件10-1Init.py在PyCharm项目“Unit10”中,新建Python程序文件“10-1Init.py”,在新建文件“10-1Init.py”的代码编辑窗口输入程序代码。importsqlite3userData=[(1,"2020011","admin","666"),(2,"2020012","better","888"),(3,"2020013","向前","123456"),(4,"2020014","寻找","123"),(5,"2020015","向好汉","1456")]sqlCreateTable="""CreateTableifnotexists用户表(用户IDint(10)primarykey,用户编号varchar(10),用户名称varchar(30),密码varchar(20))"""definitDb():#数据库文件是User.db,如果文件不存在,会自动在当前目录创建conn=sqlite3.connect("User.db")#创建一个游标对象Cursorcursor=conn.cursor()returnconn,cursordefgetInsertSql():#SQL插入语句strInsert="""insertinto用户表(用户ID,用户编号,用户名称,密码)values(?,?,?,?)"""returnstrInsertconn,cursor=initDb()cursor.execute(sqlCreateTable)foriteminuserData:cursor.execute(getInsertSql(),(item[0],item[1],item[2],item[3]))mit()#关闭游标cursor.close()#关闭Connectionconn.close()程序10-1Init.py中的主要功能是:创建sqlite3数据库“User.db”,在该数据库中新建数据表“用户表”,然后数据表中添加5条用户记录。3.创建Python程序文件10-1.py在PyCharm项目“Unit10”中,新建Python程序文件“10-1.py”,在新建文件“10-1.py”的代码编辑窗口输入程序代码,代码实现创建基于父类wx.Frame的窗口类LoginWindow,定义LoginWindow类的__init__()方法,在窗口中添加面板和多个控件,使用wx.BoxSizer对控件进行合理布局,并绑定事件。LoginWindow类的__init__()方法的代码如下所示。classLoginWindow(wx.Frame):def__init__(self,parent,id):wx.Frame.__init__(self,parent,id,title="用户登录",size=(300,190))#创建面板panel=wx.Panel(self)#创建“确定”和“取消”按钮,并绑定事件self.btnConfirm=wx.Button(panel,label="确定",pos=(50,110))self.btnConfirm.Bind(wx.EVT_BUTTON,self.OnclickSubmit)self.btnCancel=wx.Button(panel,label="取消",pos=(150,110))self.btnCancel.Bind(wx.EVT_BUTTON,self.OnclickCancel)#创建文本,左对齐self.title=wx.StaticText(panel,label="请输入用户名和密码")self.lblUser=wx.StaticText(panel,label="用户名:")self.txtUser=wx.TextCtrl(panel,style=wx.TE_LEFT)self.lblPassword=wx.StaticText(panel,label="密码:")self.txtPassword=wx.TextCtrl(panel,style=wx.TE_PASSWORD)#添加容器,容器中控件横向排列hsizerUser=wx.BoxSizer(wx.HORIZONTAL)hsizerUser.Add(self.lblUser,proportion=0,flag=wx.ALL,border=5)hsizerUser.Add(self.txtUser,proportion=1,flag=wx.ALL,border=5)hsizerPassword=wx.BoxSizer(wx.HORIZONTAL)hsizerPassword.Add(self.lblPassword,proportion=0,flag=wx.ALL,border=5)hsizerPassword.Add(self.txtPassword,proportion=1,flag=wx.ALL,border=5)#添加容器,容器中控件纵向排列vsizer=wx.BoxSizer(wx.VERTICAL)vsizer.Add(self.title,proportion=0,flag=wx.BOTTOM|wx.TOP|wx.ALIGN_CENTER,border=5)vsizer.Add(hsizerUser,proportion=0,flag=wx.EXPAND|wx.LEFT|wx.RIGHT,border=15)vsizer.Add(hsizerPassword,proportion=0,flag=wx.EXPAND|wx.LEFT|wx.RIGHT,border=15)panel.SetSizer(vsizer)LoginWindow类的__init__()方法中,分别使用Bind()函数为btnConfirm、btnCancel绑定了单击事件,单击【确定】按钮时,执行OnclickSubmit()方法判断用户名和密码是否正确,然后使用wx.MessageBox()方法弹出提示信息对话框。单击【取消】按钮时,执行OnclickCancel()方法清空输入的用户名和密码,关闭用户登录窗口。LoginWindow类的OnclickSubmit()方法和OnclickCancel()方法的代码如下所示。defOnclickSubmit(self,event):"""单击确定按钮,执行方法"""message=""username=self.txtUser.GetValue()#获取输入的用户名password=self.txtPassword.GetValue()#获取输入的密码num=getUserInfo(username,password)ifusername==""orpassword=="":#判断用户名或密码是否为空message="用户名或密码不能为空"wx.MessageBox(message)#弹出提示框elifnum>=0:#用户名和密码正确message="登录成功"wx.MessageBox(message)#弹出提示框loginWin.Hide()dataWin.Show()else:message="用户名和密码不匹配"#用户名或密码错误self.txtUser.SetValue("")#清空输入的用户名self.txtPassword.SetValue("")#清空输入的密码wx.MessageBox(message)#弹出提示框defOnclickCancel(self,event):"""单击取消按钮,执行方法"""self.txtUser.SetValue("")#清空输入的用户名self.txtPassword.SetValue("")#清空输入的密码loginWin.Hide()自定义函数initDb()用于连接sqlite3数据库,且返回连接对象和游标对象。自定义函数getUserInfo()用于从数据表“用户表”中获取符合指定条件的数据,判断用户名和密码在数据表“用户表”是否存在,代码如下所示。definitDb():#数据库文件是"User.db",如果文件不存在,会自动在当前文件创建conn=sqlite3.connect("User.db")#创建一个游标对象Cursorcursor=conn.cursor()returnconn,cursordefgetUserInfo(name,password):conn,cursor=initDb()#SQL查询数据语句strSelect="select用户名称,密码from用户表where用户名称=?and密码=?"cursor.execute(strSelect,(name,password))rows=cursor.fetchall()n=len(rows)#关闭游标cursor.close()#关闭Connectionconn.close()returnn程序10-2.py的主体程序代码如下:if__name__=="__main__":app=wx.App()loginWin=LoginWindow(parent=None,id=-1)loginWin.Show()#显示窗口dataWin=wx.Frame(parent=None,title="显示图书数据")app.MainLoop()#调用主循环方法单击工具栏中【保存】按钮,保存程序文件“10-1Init.py”和“10-1.py”。4.运行Python程序在PyCharm主窗口选择【Run】菜单,在弹出的下拉菜单中选择【Run】菜单项。在弹出的【Run】对话框中选择“10-1Init”选项,程序“10-1Init”开始运行,完成sqlite3数据库“User.db”的创建,在该数据库中完成数据表“用户表”的创建,然后数据表中添加5条用户记录。然后,运行程序“10-2.py”,程序10-2.py的运行结果如图10-5所示,显示【用户登录】窗口。图10-5【用户登录】窗口初始运行状态分别输入正确的用户名和密码后,例如输入用户名“admin”,输入密码为“666”,如图10-6所示。然后单击【确定】按钮,弹出“提示信息对话框”显示“登录成功”,如图10-7所示。在“提示信息对话框”中单击【确认】按钮后,打开【显示图书数据】窗口,如图10-8所示。图10-6在【用户登录】窗口中输入用户名与密码图10-7“登录成功”的提示信息对话框图10-8【显示图书数据】窗口【任务10-2】在窗体的QListView控件中显示销量前10名的图书名称列表【任务描述】(1)在项目Unit10创建Python程序文件“mysql10.py”,该文件定义MySQLClass类,该类中定义方法connectionSql(),该方法用于连接数据库;定义方法closeSql(),用于关闭数据库;定义方法query_top10_bookName(),该方法用于获取数据表“salesRank”中销量榜前10名的书名。(2)创建一个窗口,在该窗口添加一个QListView控件,将数据表“salesRank”中销量榜前10名的书名添加到QListView控件,并输出这些图书名称。【任务实施】1.创建Python程序文件mysql10.py在PyCharm项目“Unit10”中,新建Python程序文件“mysql10.py”,在新建文件“mysql10.py”的代码编辑窗口输入程序代码。classMySQLClass(object):#连接数据库defconnectionSql(self):#连接数据库self.db=pymysql.connect(host="localhost",user="root",password="123456",db="eCommerce",port=3306,charset="utf8")returnself.db#关闭数据库defcloseSql(self):self.db.close()#获取销量榜前10名的书名defquery_top10_bookName(self,cur):name=[]#书名列表querySql="selectbookNamefromsalesRankwhereid<=10"cur.execute(querySql)#执行sql语句results=cur.fetchall()#获取查询的所有记录i=1#定义排名变量forrowinresults:i=str(i)#转换变量类型为字符串类型name.append('第'+i+'名:'+row[0])#将排名与图书名称添加至列表中i=int(i)#由于字符串类型无法进行计算,所以转换为int类型i+=1#改变排名returnname#将保存书名的列表返回2.创建Python程序文件10-2.py在PyCharm项目“Unit10”中,新建Python程序文件“10-2.py”,在新建文件“10-2.py”的代码编辑窗口输入程序代码。importsysfromPyQt5importQtCorefromPyQt5.QtWidgetsimportQApplication,QWidget,QMainWindow,QVBoxLayout,QListViewfromPyQt5.QtGuiimportQIcon,QFontfrommysqlimportMySQL#导入自定义数据库文件classMainWindow(QMainWindow):def__init__(self,parent=None):super(MainWindow,self).__init__(parent)self.initUi()self.setListView()definitUi(self):#设置窗口属性self.resize(580,260)self.setWindowTitle("图书销量前十名排行榜")self.setWindowIcon(QIcon("favicon.ico"))defsetListView(self):#销量前十名图书名称的列表list=mysql.query_top10_bookName(cur)model=QtCore.QStringListModel()#创建字符串列表模式model.setStringList(list)#设置字符串列表font=QFont()font.setPointSize(11)self.listView=QListView()self.listView.setWordWrap(True)#自动换行self.listView.setFont(font)#设置字体大小layout=QVBoxLayout()layout.addWidget(self.listView)mainFrame=QWidget()self.setCentralWidget(mainFrame)mainFrame.setLayout(layout)self.listView.setModel(model)#设置模式mysql.closeSql()#关闭数据库if__name__=="__main__":#创建自定义数据库对象mysql=MySQL()#连接数据库sql=mysql.connectionSql()#创建游标cur=sql.cursor()app=QApplication(sys.argv)window=MainWindow()window.show()sys.exit(app.exec_())单击工具栏中【保存】按钮,保存程序文件“mysql10.py”和“10-2.py”。3.运行Python程序在PyCharm主窗口选择【Run】菜单,在弹出的下拉菜单中选择【Run】菜单项。在弹出的【Run】对话框中选择“10-2”选项,程序“10-2.py”开始运行。程序10-2.py的运行结果如图10-10所示。图10-10程序10-2.py的运行结果【任务10-3】窗体中以表格方式展示计算机与互联网图书销量排行榜【任务描述】(1)在项目Unit07创建Python程序文件10-3.py。(2)在【任务10-2】所定义MySQLClass类中新增一个方法query_top100_rankings(),该方法用于获取排行榜中排名前100位图书的排名、图书名称、定价、京东价、出版社等信息。(3)创建一个窗口,在该窗口添加一个QTableWidget控件,将数据表“salesRank”中排行前100位的图书信息添加到QTableWidget控件,并以表格方式输出这些图书的排名、图书名称、定价、京东价、出版社等字段的信息。【任务实施】在PyCharm项目Unit10中打开程序文件“mysql10.py”,在类MySQLClass类中新增一个方法query_top100_rankings(),该方法的代码如下所示。classMySQLClass(object):#获取排行前100名的图书信息defquery_top100_rankings(self,cur,table):querySql="selectID,bookName,dingPrice,jdPrice,publisherfrom{table}".format(table=table)cur.execute(querySql)#执行sql语句results=cur.fetchall()#获取查询的所有记录row=len(results)#获取信息条数,作为表格的行column=len(results[0])#获取字段数量,作为表格的列returnrow,column,results#返回信息行与信息列(字段对应的信息)在PyCharm项目Unit10中创建Python程序文件10-3.py。在程序文件10-3.py中编写程序代码,实现所需功能。importsysfromPyQt5importQtCorefromPyQt5.QtWidgetsimportQApplication,QWidget,QMainWindow,QVBoxLayout,QTableWidget,\QHeaderView,QTableWidgetItem,QAbstractItemViewfromPyQt5.QtGuiimportQIcon,QFontimportmysql10#导入自定义数据库文件importchartclassMainWindow(QMainWindow):def__init__(self,parent=None):super(MainWindow,self).__init__(parent)self.initUi()self.setListView()definitUi(self):#设置窗口属性self.resize(680,260)self.setWindowTitle("计算机与互联网图书销量排行榜")self.setWindowIcon(QIcon("favicon.ico"))defsetListView(self):#获取销量排行前100名数据信息row,column,results=mysql.query_top100_rankings(cur,"salesRank")#设置表格内容文字大小font=QFont()font.setPointSize(11)self.tableWidget=QTableWidget()self.tableWidget.verticalHeader().setHidden(True)#隐藏行号self.tableWidget.setRowCount(row)#根据数据库内容设置表格行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度某数据中心水电暖安全保障服务合同4篇
- 二零二五年度奶牛养殖金融服务与风险管理合同3篇
- 2025版实木地板批发业务供应合同范本4篇
- 二零二五年度木材行业原材料采购与仓储服务合同4篇
- 2025年度门窗行业知识产权保护合同-@-2
- 二零二五年度卵石开采与环保治理采购合同3篇
- 二零二五年度农药产品国际贸易争端解决合同
- 二零二五年度夜间经济摊位租赁管理合同
- 二零二五年度文化创意产业门面租赁合同范本4篇
- 二零二五年度外架工程高空作业人员培训合同
- 开展课外读物负面清单管理的具体实施举措方案
- 2025年云南中烟工业限责任公司招聘420人高频重点提升(共500题)附带答案详解
- 2025-2030年中国洗衣液市场未来发展趋势及前景调研分析报告
- 2024解析:第三章物态变化-基础练(解析版)
- 北京市房屋租赁合同自行成交版北京市房屋租赁合同自行成交版
- 《AM聚丙烯酰胺》课件
- 系统动力学课件与案例分析
- 《智能网联汽车智能传感器测试与装调》电子教案
- 客户分级管理(标准版)课件
- GB/T 32399-2024信息技术云计算参考架构
- 固定资产盘点报告医院版
评论
0/150
提交评论