找回密码
 会员注册
查看: 35|回复: 0

PythonGUI图形化用户界面设计(基于tkinter库)

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
67432
发表于 2024-9-4 21:01:20 | 显示全部楼层 |阅读模式
写在前面琦鱼花了不少米在莫平台买了不少课,以下是针对pythonGUI的相关学习笔记。没有学历太难受了,光有技术可不行啊!业余道行才不看学历呢!秉持着活到老学到老的信念,慢慢成为优秀的软件设计师。文字太单调,直接看代码演示,代码每一行都有写注释。开发环境 ython3.8  yCharm2020.1.3(ProfessionalEdition)库安装命令:pipinstalltkinter窗体添加图片使用tkinter库实现一个简单的窗体,并在窗体里添加一张图片,代码如下: """使用tkinter库来实现Python窗体GUI"""importtkinterastk#导入tkinter库root=tk.Tk()#创建一个名为root的窗体root.title("Py窗体")#设置窗体#root.geometry("800x560")#设置窗体大小root.geometry("800x460+120+60")#设置窗体大小及显示位置root.resizable(False,False)#设置窗体大小是否可变False为不可变True为可变(默认可变)root.iconbitmap("wwn.ico")#设置窗体图标#root.configure(bg="blue")#设置窗体背景颜色root.config(bg="#202124")#设置窗体背景颜色text=tk.Label(root,text="滚一滚",bg="#202124",fg="#FFF",font=('楷体',14,'bold'))#设置一个文本标签及其背景颜色和前景颜色、字体及字体大小样式(bold)text.pack()#将文本标签添加到窗体photo=tk.PhotoImage(file='jww.png')#创建PhotoImage对象并指定图片文件lab=tk.Label(root,image=photo)#创建一个标签(lab)并将photo作为标签内容传入lab.pack()#将图片标签添加到窗体root.mainloop()#设置窗体可见(循环)使用pillow库实现在窗体里添加图片,代码如下:"""为了更好的添加图片到窗体,这里用到了pillow库"""fromtkinterimport*#导入tkinter库及加载其所有方法fromPILimportImageTk,Image#导入PIL库及加载ImageTk和Image方法root=Tk()#创建一个名为root的窗体root.title("图片窗体")#设置窗体image=ImageTk.PhotoImage(Image.open("jww.png"))#使用ImageTk.PhotoImage方法获取图片label=Label(image=image)#创建一个标签(lab)并将image作为标签内容传入label.pack()#将图片标签添加到窗体root.mainloop()#设置窗体可见(循环)Grid布局Grid布局相关代码如下:"""grid布局网格布局"""importtkinterastk#导入tkinter库并重命名为tkroot=tk.Tk()#创建一个名为root的窗体root.title("Py窗体")#设置窗体#root.geometry("800x560")#设置窗体大小root.geometry("800x460+120+60")#设置窗体大小及显示位置tk.Button(root,text="按钮1").grid(row=0,column=0)#创建一个按钮并使用grid布局tk.Button(root,text="按钮2").grid(row=1,column=1)tk.Button(root,text="按钮3").grid(row=2,column=2)tk.Button(root,text="按钮4").grid(row=3,column=3)tk.Button(root,text="按钮5").grid(row=4,column=4)tk.Button(root,text="按钮6").grid(row=5,column=5)root.mainloop()#设置窗体可见Pack布局Pack布局相关代码如下:"""pack布局"""importtkinterastk#导入tkinter库并重命名为tkroot=tk.Tk()#创建一个名为root的窗体root.title("Py窗体")#设置窗体#root.geometry("800x560")#设置窗体大小root.geometry("800x460+120+60")#设置窗体大小及显示位置tk.Button(root,text="按钮").pack()#创建一个按钮并使用pack布局Bt0=tk.Button(root,text="按钮0").pack(side="right")#创建一个按钮并将按钮添加到窗体#side设置组件布局位置right(右边)left(左边)bottom(底部)top(顶部)Bt1=tk.Button(root,text="按钮1").pack(expand="yes",fill="x")#创建一个按钮并将按钮添加到窗体#expand="yes"(扩展)fill="x"(水平方向填充组键)fill="y"(垂直方向填充组键)Bt2=tk.Button(root,text="按钮2").pack(side="top",pady="10")Bt3=tk.Button(root,text="按钮3").pack(side="top")#pady="10"按钮之间垂直方向间隔10像素Bt4=tk.Button(root,text="按钮4").pack(side="left",padx="10")Bt5=tk.Button(root,text="按钮5").pack(side="left")#pady="10"按钮之间水平方向间隔10像素Bt6=tk.Button(root,text="按钮6").pack(side="left",ipadx="10")Bt7=tk.Button(root,text="按钮7").pack(side="left")#ipadx="10"(组建填充10像素,组建扩大水平方向)#ipady="10"(组建填充10像素,组建扩大垂直方向)root.mainloop()#设置窗体可见Place布局place布局相关代码如下:"""place布局绝对布局灵活"""importtkinterastk#导入tkinter库并重命名为tkroot=tk.Tk()#创建一个名为root的窗体root.title("Py窗体")#设置窗体#root.geometry("800x560")#设置窗体大小root.geometry("800x460+120+60")#设置窗体大小及显示位置tk.Label(root,text="请输入姓名:").place(x=30,y=10)#创建标签并使用place布局tk.Entry(root).place(x=30,y=50)#创建输入框并使用place布局tk.Button(root,text="提交").place(x=30,y=90)#创建一个按钮并使用place布局#(x=0,y=0)设置按钮的坐标root.mainloop()#设置窗体可见'''使用place布局需要注意的问题:>>>对于大型和复杂界面,手动设置每个小部件的位置可能会变得困难而且容易出错>>>如果窗体发生大小变化,需要手动调整小部件的大小和尺寸,因为place布局不会自动适应大小变化>>>如果小部件之间有重叠,可能会导致无法正常显示和交互虽然place布局具有灵活性,但通常建议在简单布局中使用pack或grid布局管理器,而将place保留给需要更精确控制的特定情况'''鼠标事件处理相关代码如下:"""事件绑定和处理quit退出command控制,指挥click点击Motion运动"""importtkinterastk#导入tkinter库并重命名为tk#事件回调函数会自动接收一个参数(通常命名event),该参数包含有关事件的信息,如鼠标位置,按下的键值等。defclick(event):print("鼠标单击:",event.x,event.y)#获取鼠标实时在按钮上的坐标#print("按钮点击触发!")root=tk.Tk()#创建一个名为root的窗体root.title("Py事件窗体")#设置窗体root.geometry("500x460")#设置窗体大小button=tk.Button(root,text="关闭")#创建一个关闭按钮button.bind("",click)#表示鼠标左键表示鼠标中键表示鼠标右键表示鼠标运动button.pack()#设置按钮布局#tk.Button(root,text="关闭",command=quit).pack()#创建一个关闭按钮并使用pack布局#command=quit(command:控制指挥quit退出)command事件root.mainloop()#设置窗体可见键盘事件处理相关代码如下:"""事件绑定和处理quit退出command控制,指挥click点击Motion运动keypress按键"""importtkinterastk#导入tkinter库并重命名为tkdefkey(event):print("键盘事件触发:",event.keysym)#键盘事件触发时,defkey函数被调用,事件返回键盘键值root=tk.Tk()#创建一个名为root的窗体frame=tk.Frame(root,width=300,height=500)#在窗体里设置一个容器,宽300,高500frame.bind("",key)frame.pack()#设置容器布局frame.focus_set()#设置焦点,已接收键盘事件root.mainloop()#设置窗体可见警告弹窗相关代码如下:"""弹窗,警告窗口"""importtkinterastk#导入tkinter库并重命名为tkwin=tk.Tk()#创建一个名为win的窗体win.title("登录")win.geometry("500x460")#设置窗体大小tk.Label(win,text="账号:").grid(row=0)tk.Label(win,text="密码:").grid(row=2)#使用grid布局,将两个标签分别布置在第一行和第二行e1=tk.Entry(win)#创建一个输入框控件e2=tk.Entry(win,show='*')#创建一个输入框控件以*号形式显示密码e1.grid(row=0,column=1,padx=10,pady=5)#控件设置为grid布局,并设置相关属性e2.grid(row=2,column=1,padx=10,pady=5)#控件设置为grid布局,并设置相关属性tk.Button(win,text="登录",width=10).grid(row=3,column=0,padx=15,pady=5)tk.Button(win,text="退出",width=10,command=win.quit).grid(row=3,column=1,padx=15,pady=5)#使用grid()的函数布局,并控制按钮的显示位置win.mainloop()#设置窗体可见 登录时的相关弹窗:"""弹窗,警告窗口"""importtkinterastk#导入tkinter库并重命名为tkfromtkinterimportmessagebox#导入messagebox模块win=tk.Tk()#创建一个名为win的窗体win.title("登录")win.geometry("500x460")#设置窗体大小tk.Label(win,text="账号:").grid(row=0)tk.Label(win,text="密码:").grid(row=2)#使用grid布局,将两个标签分别布置在第一行和第二行e1=tk.Entry(win)#创建一个输入框控件e2=tk.Entry(win,show='*')#创建一个输入框控件以*号形式显示密码e1.grid(row=0,column=1,padx=10,pady=5)#控件设置为grid布局,并设置相关属性e2.grid(row=2,column=1,padx=10,pady=5)#控件设置为grid布局,并设置相关属性deflogin():messagebox.showinfo("提示","欢迎使用该软件!")#登录按钮被点击触发login函数,调用messagebox库的showinfo方法,该方法弹出一个提示窗口,内容:欢迎使用该软件!tk.Button(win,text="登录",width=10,command=login).grid(row=3,column=0,padx=15,pady=5)tk.Button(win,text="退出",width=10,command=win.quit).grid(row=3,column=1,padx=15,pady=5)#使用grid()的函数布局,并控制按钮的显示位置win.mainloop()#设置窗体可见'''在tkinter中,可以使用messagebox模块创建不同的提示窗口。messagebox.showinfo(title,message):显示信息窗口,显示一般信息和成功消息messagebox.showwarning(title,message):显示警告窗口,显示警告信息和提示消息messagebox.showerror(title,message):显示错误窗口,显示错误信息和异常消息messagebox.askquestion(title,message):显示询问窗口,显示用户是与否的问题messagebox.askyesno(title,message):显示是与否选择窗口,让用户选择messagebox.askokcancel(title,message):显示确定与取消选择窗口,让用户选择messagebox.askyesnocancel(title,message):显示是与否和取消选择窗口,让用户选择'''多行文本框相关代码如下:"""多行文本框"""importtkinterastk#导入tkinter库并重命名为tkwino=tk.Tk()#创建一个名为wino的窗体wino.title("多行文本框")#设置窗体wino.geometry("800x460+120+60")#设置窗体大小及显示位置textarea=tk.Text(wino,height=12,width=20,bg="#242528",fg="white",font=("楷体",16))#设置一个多行文本框,指定高12,宽20,背景为黑色(#242528)前景色为白色,设置字体为楷体字号16textarea.pack()#选择布局方式wino.mainloop()#设置窗体可见下拉选择菜单相关代码如下:"""下拉选择菜单"""importtkinterastk#导入tkinter库并重命名为tkfromtkinterimportttk#导入ttk模块wino=tk.Tk()#创建一个名为wino的窗体wino.title("下拉菜单")#设置窗体wino.geometry("800x460+120+60")#设置窗体大小及显示位置cbox=ttk.Combobox(wino,width=16,font=("楷体",16))#设置一个下拉菜单宽16字体为楷体字体大小16cbox['value']=('醉翁','莲花','瑶池')#设置下拉菜单的菜单项cbox.pack()#选择布局方式wino.mainloop()#设置窗体可见登录验证相关代码如下:"""用户登录时的密码验证变动函数:login"""importtkinterastk#导入tkinter库并重命名为tkfromtkinterimportmessagebox#导入messagebox模块win=tk.Tk()#创建一个名为win的窗体win.title("登录")win.geometry("500x460")#设置窗体大小tk.Label(win,text="账号:").grid(row=0)tk.Label(win,text="密码:").grid(row=2)#使用grid布局,将两个标签分别布置在第一行和第二行e1=tk.Entry(win)#创建一个输入框控件e2=tk.Entry(win,show='*')#创建一个输入框控件以*号形式显示密码e1.grid(row=0,column=1,padx=10,pady=5)#控件设置为grid布局,并设置相关属性e2.grid(row=2,column=1,padx=10,pady=5)#控件设置为grid布局,并设置相关属性deflogin():username=e1.get()#将e1用户输入的内容赋值给变量usernamepassword=e2.get()#将e2用户输入的内容赋值给变量passwordifusername=="qiyu"andpassword=="12345678":messagebox.showinfo("提示","登录成功!")else:messagebox.showerror("登录失败","用户名或密码错误!")#使用if...else(条件判断)判断用户的账户密码是否正确#登录按钮被点击触发login函数,调用messagebox库的showinfo方法,该方法弹出一个提示窗口tk.Button(win,text="登录",width=10,command=login).grid(row=3,column=0,padx=15,pady=5)tk.Button(win,text="退出",width=10,command=win.quit).grid(row=3,column=1,padx=15,pady=5)#使用grid()的函数布局,并控制按钮的显示位置win.mainloop()#设置窗体可见单选框和复选框相关代码如下:"""单选框和复选框"""importtkinterastk#导入tkinter库并重命名为tkroot=tk.Tk()#创建一个名为root的窗体root.title("Py窗体")#设置窗体root.geometry("800x460+120+60")#设置窗体大小及显示位置r1=tk.Radiobutton(root,text="错",font=("楷体",16),value=1)#设置一个单选框文本为对使用pack布局设置字体字号r1.pack()r2=tk.Radiobutton(root,text="错",font=("楷体",16),value=1)#设置一个单选框文本为错使用pack布局设置字体字号r2.pack()c1=tk.Checkbutton(root,text="红",font=("楷体",16))c1.pack()c2=tk.Checkbutton(root,text="红",font=("楷体",16))c2.pack()c3=tk.Checkbutton(root,text="红",font=("楷体",16))c3.pack()#设置三个单选框文本为红绿蓝使用pack布局设置字体字号root.mainloop()#设置窗体可见读取写入Excel数据相关写入代码如下:importtkinter#导入tkinter库importtkinterastkfromtkinterimportttkfromopenpyxlimportWorkbook#导入库,openpyxl用于处理Excel文件win=tk.Tk()win.title('ExcelDate')#设置窗体win.geometry("400x350")#设置窗体大小tk.Label(win,text="姓名:").grid(row=0)#创建一个标签,使用grid布局,行=0name=tk.Entry(win)#创建对应输入框组件name.grid(row=0,column=1,pady=5)#使用grid布局,行=0列=1组建间距Y=5tk.Label(win,text="课程:").grid(row=1)#创建一个标签,使用grid布局,行=0course=ttk.Combobox(win,width=18)#创建下拉列表组件,设置宽18course['value']=('语文','数学','英语')#添加下拉列表选项course.grid(row=1,column=1)#使用grid布局,行=1列=1tk.Label(win,text="成绩:").grid(row=2)#创建一个标签,使用grid布局,行=2score=tk.Entry(win)#创建对应输入框组件score.grid(row=2,column=1,pady=5)#使用grid布局,行=2列=1组建间距Y=5defsave():#点击"写入"按钮被触发的函数wb=Workbook()#创建一个新的工作簿ws=wb.active#选择默认的工作表ws['A1']="姓名"#写入内容到对应单元格A1ws['B1']="课程"#写入内容到对应单元格B1ws['C1']="成绩"#写入内容到对应单元格C1ws['A2']=name.get()#获取name输入框内容写入对应单元格A2ws['B2']=course.get()#获取name输入框内容写入对应单元格B2ws['C2']=score.get()#获取name输入框内容写入对应单元格C2wb.save("Date.xlsx")#保存文件"Date.xlsx"tkinter.Button(win,text="写入",width=10,command=save).grid(row=3,column=1)#创建一个按钮,设置宽为10,绑定save事件,使用grid布局,行=3列=1win.mainloop()#设置窗体可见#缺点:每运行一次,之前的数据会被覆盖;而且每次写入的数据有局限性,点击"写入"按钮后输入的数据没有清空相关读取代码如下:importtkinterastk#导入tkinter库fromopenpyxl.reader.excelimportload_workbook#导入openpyxl库win=tk.Tk()#创建一个窗体win.title("信息查询")#设置窗体win.geometry('340x200')#设置窗体大小defsearch():#"查询"按钮被点击的回调函数name=namentry.get()#获取输入框相关内容workbook=load_workbook(filename='Date.xlsx')#加载要查询的Excel文件sheet=workbook.activeforrowinsheet.iter_rows(values_only=True):#遍历查找数据ifnameinrow:score=row[2]resultlabel.config(text="成绩:{}".format(score))#如果结果匹配就输出returnresultlabel.config(text="未查询到相关成绩!")#如果没有查询到结果就输出这句话namelabel=tk.Label(win,text="请输入姓名:")#创建一个标签namelabel.pack()#设置pack布局namentry=tk.Entry(win)#创建输入框namentry.pack()#设置pack布局searchbutton=tk.Button(win,text="查询",command=search)#创建一个按钮并绑定相关事件searchbutton.pack()#设置pack布局resultlabel=tk.Label(win,text="")#创建一个标签resultlabel.pack()#设置pack布局win.mainloop()#启动主循环(设置窗体可见)Json数据交互写入数据到json文件"""Json数据交互(Json==>>JavaScriptObjectNotation)Json特点:1.简洁2.可读性好3.可扩展性强4.跨平台和语言的互操作性5.广泛支持这是一个写入数据到json文件的程序"""importtkinterastk#导入tkinter库importjson#导入json库defsave():#"保存"按钮回调函数date={'name':namentry.get(),'score':scorentry.get()}withopen('Date.json','a',encoding='utf-8')asfile:json.dump(date,file,ensure_ascii=False)file.write('\n')namentry.delete(0,tk.END)#清空输入框scorentry.delete(0,tk.END)win=tk.Tk()#创建一个窗体win.title("JsonRead")#设置窗体win.geometry('340x270')#设置窗体大小namelabel=tk.Label(win,text="请输入姓名:")#创建一个标签namelabel.pack()#设置pack布局namentry=tk.Entry(win)#创建一个输入框namentry.pack()#设置pack布局scorelabel=tk.Label(win,text="语文成绩:")#创建一个标签scorelabel.pack()#设置pack布局scorentry=tk.Entry(win)#创建一个输入框scorentry.pack()#设置pack布局savebutton=tk.Button(win,text="保存",command=save)#创建一个按钮并绑定事件savebutton.pack()#设置pack布局win.mainloop()#启动主循环(设置窗体可见)读取Json文件数据"""读取Json文件里的数据"""importjsonimporttkinterastk#导入tkinter库defsearch():#"查询"按钮被点击的回调函数name=namentry.get()#获取输入框相关内容withopen('Date.json','r',encoding='utf-8')asf:lines=f.readlines()forlineinlines:date=json.loads(line)ifdate["name"]==name:score=date["score"]resultlabel.config(text="成绩:{}".format(score))#如果结果匹配就输出returnresultlabel.config(text="未查询到相关成绩!")#如果没有查询到结果就输出这句话win=tk.Tk()#创建一个窗体win.title("信息查询")#设置窗体win.geometry('340x200')#设置窗体大小namelabel=tk.Label(win,text="请输入姓名:")#创建一个标签namelabel.pack()#设置pack布局namentry=tk.Entry(win)#创建输入框namentry.pack()#设置pack布局searchbutton=tk.Button(win,text="查询",command=search)#创建一个按钮并绑定相关事件searchbutton.pack()#设置pack布局resultlabel=tk.Label(win,text="")#创建一个标签resultlabel.pack()#设置pack布局win.mainloop()#启动主循环(设置窗体可见)安装MySQL数据库MySQL官网MySQL 安装程序1.到官网下载2.双击打开安装程序3.直接点击下一步4.勾选接受协议许可,点击下一步5.选择典型类型,点击下一步6.点击安装7.[安装过程]8.点击完成9.点击下一步10.选择安装位置点击下一步11.传输协议和端口默认不修改,点击下一步12.设置root密码,点击下一步13.直接点击下一步14.不修改,点击下一步15.直接点击下一步16.点击执行17.执行完成,点击下一步18.点击完成,安装结束通过cmd操作MySQL打开cmd(命令提示符&控制台&终端),打开的方式多种多样,我只讲我用的方式按键盘上的Win加r键,在弹出的运行窗口输入cmd回车(enter键)或点击确定都行以文件夹形式打开MySQL安装时的bin目录,将路径复制下来在cmd里输入cd空格加刚刚复制的路径(可用Ctrl加c键粘贴上)回车(enter键)执行#你的MySQL安装路径可能和我的不一样使用为了方便实时调用MySQL相关程序,我这里配置了一下环境变量pathcmd里相关操作如下,文字这里就不多讲解了MicrosoftWindows[版本10.0.19042.746](c)2020MicrosoftCorporation.保留所有权利。C:\Users\Administrator>mysql-uroot-p#连接数据库登入root账户,输入安装时设置的密码Enterpassword:********WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis15Serverversion:8.4.0MySQLCommunityServer-GPLCopyright(c)2000,2024,Oracleand/oritsaffiliates.OracleisaregisteredtrademarkofOracleCorporationand/oritsaffiliates.Othernamesmaybetrademarksoftheirrespectiveowners.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.mysql>createdatabasetest;#创建一个名为test的数据库QueryOK,1rowaffected(0.00sec)mysql>showdatabases;#查看数据库列表+--------------------+|Database|+--------------------+|information_schema||mysql||performance_schema||sys||test|+--------------------+5rowsinset(0.00sec)mysql>usetest;#选中名为test的数据库Databasechangedmysql>createtableuser(idint,namechar(30));#添加一个列表,并在列表里添加id和name字段QueryOK,0rowsaffected(0.02sec)mysql>descuser;#查看数据表+-------+----------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+----------+------+-----+---------+-------+|id|int|YES||NULL|||name|char(30)|YES||NULL||+-------+----------+------+-----+---------+-------+2rowsinset(0.00sec)mysql>insertintouservalues(1,'qiyu');#在表里插入一条数据QueryOK,1rowaffected(0.00sec)mysql>select*fromuser;#查看表里的数据+------+------+|id|name|+------+------+|1|qiyu|+------+------+1rowinset(0.00sec)mysql>droptableuser;#删除列表QueryOK,0rowsaffected(0.01sec)mysql>dropdatabasetext;###输入错误###ERROR1008(HY000):Can'tdropdatabase'text';databasedoesn'texistmysql>dropdatabasetest;#删除数据库(test)QueryOK,0rowsaffected(0.00sec)mysql>showdatabases;#重新查看数据库列表+--------------------+|Database|+--------------------+|information_schema||mysql||performance_schema||sys|+--------------------+4rowsinset(0.00sec)mysql>exit#退出MySQL数据库程序ByeC:\Users\Administrator>写入数据到MySQL通过下面的程序将数据保存到MySQL数据库pipinstallpymysql#安装pymysql库提前创建数据库test创建表,图形化界面程序代码如下:"""将数据写入MySQL数据库"""importtkinterastk#导入tkinter库importpymysql#导入pymysql库defsave():name=namentry.get()score=scorentry.get()cnx=pymysql.connect(#连接MySQL数据库host='localhost',#本机的地址及端口user='root',#账户rootpassword='12345678',#密码database='test'#指定数据库)cursor=cnx.cursor()#创建游标对象sql="insertintouser(name,score)values(%s,%s)"#sql表示要执行的sql语句%s是占位符cursor.execute(sql,(name,score))cnx.commit()#提交事务cnx.close()#并关闭连接#清空输入框内容namentry.delete(0,tk.END)scorentry.delete(0,tk.END)win=tk.Tk()#创建一个窗体win.title("WriteSQL")#设置窗体win.geometry('340x200')#设置窗体大小namelabel=tk.Label(win,text="姓名:")#创建一个标签namelabel.pack()#设置pack布局namentry=tk.Entry(win)#创建输入框namentry.pack()#设置pack布局scorelabel=tk.Label(win,text="成绩:")#创建一个标签scorelabel.pack()#设置pack布局scorentry=tk.Entry(win)#创建输入框scorentry.pack()#设置pack布局button=tk.Button(win,text="保存",command=save)#创建一个按钮并绑定相关事件button.pack()#设置pack布局win.mainloop()#启动主循环(设置窗体可见)代码运行结果图:数据库数据展示:cmd里数据库数据展示:MicrosoftWindows[版本10.0.19042.746](c)2020MicrosoftCorporation.保留所有权利。C:\Users\Administrator>mysql-uroot-pEnterpassword:********WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis21Serverversion:8.4.0MySQLCommunityServer-GPLCopyright(c)2000,2024,Oracleand/oritsaffiliates.OracleisaregisteredtrademarkofOracleCorporationand/oritsaffiliates.Othernamesmaybetrademarksoftheirrespectiveowners.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.mysql>usetest;Databasechangedmysql>descuser;+-------+----------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+----------+------+-----+---------+-------+|name|char(30)|YES||NULL|||score|int|YES||NULL||+-------+----------+------+-----+---------+-------+2rowsinset(0.08sec)mysql>select*fromuser;+------+-------+|name|score|+------+-------+|萌萌|99||玲玲|87||琪琪|90|+------+-------+3rowsinset(0.01sec)mysql>从MySQL读取数据程序代码如下:"""读取数据库里的数据"""importtkinterastk#导入tkinter库importpymysql#导入pymysql库win=tk.Tk()#创建一个窗体win.title("ReadSQL")#设置窗体win.geometry('340x200')#设置窗体大小cnx=pymysql.connect(#连接MySQL数据库host='localhost',#本机的地址及端口user='root',#账户rootpassword='12345678',#密码database='test'#指定数据库)defsearch():#查询按钮回调函数name=namentry.get()#获取姓名输入框内容cursor=cnx.cursor()cursor.execute("selectscorefromuserwherename=%s",name)result=cursor.fetchone()ifresultisnotNone:#查找匹配的数据score=result[0]scorelabel.config(text=f"{name}的成绩为:{score}")#找到输出else:scorelabel.config(text=f"找不到{name}的成绩")#未找到输出cursor.close()#关闭查找namelabel=tk.Label(win,text="请输入姓名:")#创建一个标签namelabel.pack()#设置pack布局namentry=tk.Entry(win)#创建输入框namentry.pack()#设置pack布局scorelabel=tk.Label(win)#创建一个标签scorelabel.pack()#设置pack布局button=tk.Button(win,text="查询",command=search)#创建一个按钮并绑定相关事件button.pack()#设置pack布局win.mainloop()#启动主循环(设置窗体可见)cnx.close()#MySQL关闭连接数据库代码运行后的界面:窗体主菜单程序代码如下:"""给窗体添加主菜单tearoff=False:通过将tearoff设置为False,从而使菜单不可拆分,以确保始终与主窗体关联,无法单独悬浮显示"""importtkinterastk#导入tkinter库win=tk.Tk()#创建一个窗体win.title("MainMenu")#设置窗体win.geometry('640x400')#设置窗体大小win.config(bg='black')#设置窗体背景为黑色menuMain=tk.Menu(win)#创建主菜单fileMenu=tk.Menu(menuMain,tearoff=False)#在主菜单下创建文件菜单menuMain.add_cascade(label="文件",menu=fileMenu)#设置菜单名并绑定到文件菜单fileMenu.add_command(label="打开")#创建子选项菜单fileMenu.add_command(label="保存")fileMenu.add_separator()#分割线fileMenu.add_command(label="退出",command=quit)editMenu=tk.Menu(menuMain,tearoff=False)#在主菜单下创建编辑菜单menuMain.add_cascade(label="编辑",menu=editMenu)#设置菜单名并绑定到编辑菜单editMenu.add_command(label="复制")#创建子选项菜单editMenu.add_command(label="粘贴")editMenu.add_command(label="剪切")win.config(menu=menuMain)#将主菜单放入窗体里win.mainloop()#启动主循环(设置窗体可见)代码运行效果图如下:程序的美化使用到了ttkbootstrap库(不完善)pipinstallttkbootstrap#安装ttkbootstrap库程序代码如下:"""图形化界面的优化ttkrootstrapstyleboot:启动样式"""importtkinterastk#导入tkinter库importttkbootstrapasttk#导入ttkbootstrap库fromttkbootstrap.constantsimport*win=ttk.Window(title="BeautifScreen",#创建一个窗体设置窗体themename="litera",#设置主题size=(320,460),#设置窗体大小position=(500,500),#设置窗体显示位置resizable=None,#设置窗体大小固定(不可更改)alpha=0.9)#设置窗体透明度inputLabel=tk.Label(win,text="姓名:").grid(row=0,column=0,pady=10)#创建标签并设置布局inputentry=tk.Entry(win).grid(row=0,column=1,pady=10)#创建输入框并设置布局StarSignLabel=tk.Label(win,text="星座:").grid(row=1,column=0)#创建标签并设置布局StarSigncombobox=ttk.Combobox(win,values=["水瓶座","双鱼座","白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","摩羯座"],width=17).grid(row=1,column=1,pady=5)#创建下拉列表并添加相关选项,设置宽度及布局occupationLabel=tk.Label(win,text="从事的职业:").grid(row=2,column=0)#创建标签并设置布局occupation1=ttk.Checkbutton(win,text="程序员",styleboot="selected").grid(row=2,column=1)#创建复选框并设置布局occupation2=ttk.Checkbutton(win,text="网络工程师",styleboot="roundedtoggle").grid(row=3,column=1)occupation3=ttk.Checkbutton(win,text="大数据工程师",styleboot="squaredtoggle").grid(row=4,column=1)occupation4=ttk.Checkbutton(win,text="硬件工程师").grid(row=5,column=1)occupation5=ttk.Checkbutton(win,text="前端开发").grid(row=6,column=1)occupation6=ttk.Checkbutton(win,text="后端开发").grid(row=7,column=1)occupation7=ttk.Checkbutton(win,text="软件架构师").grid(row=8,column=1)occupation8=ttk.Checkbutton(win,text="软件工程师").grid(row=9,column=1)submitButton=ttk.Button(win,text="保存并提交",width=18,styleboot="danger").grid(row=5,column=1,pady=5)#创建按钮并设置布局clearButton=ttk.Button(win,text="取消并重置",width=18).grid(row=6,column=1)win.mainloop()#启动主循环(设置窗体可见)封装程序pipinstallpyinstaller#安装封装库pyinstallerpyinstaller--onefile--icon=fish.icoencapsulation.py#执行封装#上面的命令里fish.ico是一个ico图标,encapsulation.py是一个python文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-3 00:56 , Processed in 0.455397 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表