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

Python--GUI图形界面编程—GUI编程实例博主也在持续学习中持续更新中!!!欢迎白嫖也求粉啊啊啊]

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
65417
发表于 2024-9-4 14:31:38 | 显示全部楼层 |阅读模式
本文介绍了GUI的图形界面编程(相关视频是哔站上的应该搜这个题目就能找到),文章还是很基础的,反正我是小白从0开始,主要的结构tinkter库、重要组件简介(这个不用死记硬背用的时候再说)、Label(我一直以为是Lable)、option、Button(后续还会涉及到),其实很多代码部分是重复的,因为框架是固定的,跟着敲两遍就记住了,还是要动手。以前不知道Python的前端长什么样,现在知道喽~~感觉Django也不错,下次可以试试。还是希望佬们能点个赞吧!!!目录1.tinkter库2.窗口大小和位置3.GUI编程整体描述_重要组件汇总4.GUI程序的景点面向对象写法5.Label组件_tkinter中图像正确显示全局变量的写法1.显示文本2.显示图像3.自定义样式4.锚点和位置5.响应事件实例代码展示:6.options选项详解--底层源码分析和阅读_可变参数运算符重载(复习)1.可变参数指的是“可变数量的参数”。分两种情况:2.设置option选项7.Button_anchor(锚点)位置控制8.Entry_StringVar登录界面设计和功能实现1.tinkter库2.窗口大小和位置tkinter主窗口geometry('wxh+/-x/y')来进行设置窗口的大小和位置#P1Tkinter库#P2tkinter主窗口#geometry('wxh+/-x/y')来进行设置​fromtkinterimport*fromtkinterimportmessagebox​root=Tk()#窗口对象​root.title('我的第一个GUI程序')root.geometry('500x300+100+200')#组件btn01=Button(root)btn01["text"]="点我就送花"#布局管理器btn01.pack()#​​#定义事件defsonghua(e):   #e表示事件对象 messagebox.showinfo('Message','送你一朵小红花') print('爱你99')​​#事件绑定btn01.bind("",songhua)#表示鼠标左键单击​root.mainloop()  #窗口调用组件的mainloop()方法,进入事件循环3.GUI编程整体描述_重要组件汇总4.GUI程序的景点面向对象写法#P4GUI程序的景点面向对象写法"""测试一个经典的GUI程序写法,使用面向对象的方式"""​fromtkinterimport*fromtkinterimportmessagebox​​#Frame是一个组件classApplication(Frame): def__init__(self,master=None):   super().__init__(master)#调用父类Frame的方法   self.master=master   self.pack()#布局管理器   self.createWidget()​ defcreateWidget(self):   """创建组件"""   self.btn01=Button(self)   self.btn01["text"]='点击送花'   self.btn01.pack()   self.btn01["command"]=self.songhua​   #创建一个退出按钮   self.btn01Quit=Button(self,text="退出",command=root.destroy)   self.btn01Quit.pack()​ defsonghua(self):   messagebox.showinfo('送花','送你一朵小红花')​​if__name__=='__main__': #创建根窗口对象 root=Tk() root.geometry('500x300+100+200') root.title('一个经典的GUI程序类的测试') app=Application(master=root)​ root.mainloop()#事件循环5.Label组件_tkinter中图像正确显示全局变量的写法Label(标签)主要用于显示文本信息,也可以显示图像(不可编辑)。Label的主要标签:文心一言在Tkinter中,虽然通常我们提到的是Label(用于显示文本信息,但Tkinter的Label组件实际上也支持显示图像。要在Tkinter中使用Label显示图像,你通常会使用PhotoImage(对于Tkinter支持的图像格式,如GIF和PPM)或者通过PIL(PythonImagingLibrary,现在更常用的是Pillow库)来加载和处理更广泛的图像格式(如JPEG、PNG等),然后将这些图像作为Label的image属性来显示。关于Label组件的常用功能和几个简单介绍:1.显示文本Label组件最基本的功能就是显示文本。你可以通过text参数来指定要显示的文本内容。fromtkinterimportTk,Label​root=Tk()label=Label(root,text="Hello,Tkinter!")label.pack()root.mainloop()2.显示图像为了显示图像,你需要先加载图像,然后将其作为Label的image属性。注意,对于非GIF图像,你可能需要使用Pillow库。fromtkinterimportTk,LabelfromPILimportImage,ImageTk​root=Tk()​#假设你有一个名为'image.png'的图像文件image=Image.open("image.png")photo=ImageTk.PhotoImage(image)​label=Label(root,image=photo)label.image=photo #保留对图像的引用,防止被垃圾回收label.pack()​root.mainloop()3.自定义样式Label组件支持多种样式自定义,比如你可以通过fg(前景色,即文本颜色)和bg(背景色)来设置文本和背景的颜色。label=Label(root,text="ColoredText",fg="blue",bg="yellow")4.锚点和位置你可以通过anchor参数来设置文本或图像在Label中的锚点位置(如左上角、中心、右下角等),以及通过布局管理器(如pack(),grid(),place())来控制Label在窗口中的位置。label=Label(root,text="CenteredText",anchor="center")label.pack(expand=True) #使用pack时,expand=True可以让Label扩展以填充整个窗口5.响应事件虽然Label本身不是为交互设计的,但你可以通过将其与事件(如鼠标点击)绑定来创建简单的交互。不过,这通常需要与另一个组件(如Button)结合使用,或者通过自定义的方式来捕捉事件。defon_click(event):  print("Labelclicked!")​label=Label(root,text="ClickMe")label.bind("",on_click) #绑定鼠标左键点击事件label.pack()请注意,直接在Label上绑定事件并不是常见的做法,因为它主要是为显示信息而设计的。对于需要用户交互的场景,使用Button或Canvas等组件可能更合适。实例代码展示:#P5Label组件_tkinter中图像正确显示全局变量的写法​fromtkinterimport*#fromtkinterimportmessagebox​classApplication(Frame): def__init__(self,master=None):   super().__init__(master)   #调用父类Frame的方法   self.master=master   self.pack()          #布局管理器   self.createWidget()​ defcreateWidget(self):   """创建组件"""   self.label01=Label(self,text="百战成诗",width=10,height=2,              bg="black",fg="white")   self.label01.pack()​   self.label02=Label(self,text="百战不衰",width=12,height=2,              bg="blue",fg="white",font=('黑体',30))   self.label02.pack()       #显示图像   globalphoto     #设置为全局变量,如果是局部变量本方法执行完毕后,图像对象会被销毁,窗口不会显示图像   photo=PhotoImage(file="img/01.gif")   self.label03=Label(self,image=photo)   self.label03.pack()​   #显示多行文本   #relief="groove",边框显示效果justify="right"右对齐(对齐方式)   self.label04=Label(self,text="巴黎奥运会,中国最棒,加油中国健将们",              borderwidth=2,relief="groove",justify="right",font=5)   self.label04.pack()​if__name__=='__main__': #创建根窗口对象 root=Tk() root.geometry('800x800+200+200') root.title('测试Label') app=Application(master=root) root.mainloop()#事件循环6.options选项详解--底层源码分析和阅读_可变参数运算符重载(复习)1.可变参数指的是“可变数量的参数”。分两种情况:*param(一个星号),将多个参数收集到一个“元组”对象中。**param(两个星号),将多个参数收集到一个“字典”对象中。2.设置option选项7.Button_anchor(锚点)位置控制importtkinterastk​defon_button_click(): print("按钮被点击了!")​#创建主窗口root=tk.Tk()root.title("Button示例")​#创建一个按钮#参数:主窗口,文本,命令(点击时调用的函数)button=tk.Button(root,text="点击我",command=on_button_click)​#将按钮放置到主窗口中button.pack(pady=20)#pady参数用于在按钮和窗口边缘之间添加垂直填充​#启动事件循环root.mainloop()8.Entry_StringVar登录界面设计和功能实现Entry用来接收一行字符串的控件,如果用户输入的文字长度长于Entry控件的宽度时,文字会自动向后滚动,如果相输入多行文本,需要使用Text控件。#p8fromtkinterimport*fromtkinterimportmessagebox​#Frame是一个组件classApplication(Frame): def__init__(self,master=None):   super().__init__(master)#调用父类Frame的方法   self.master=master   self.pack()#布局管理器   self.createWidget()​ defcreateWidget(self):   #创建登录界面组件   self.label01=Label(self,text='用户名')   self.label01.pack()​   #StringVar变量绑定到指定的组件。   #StringVar变量的值发生变化,组件的值也发生变化   #组件内容发生变化,StringVar变量的值也发生变化   #双向关联的作用???   v1=StringVar()      #数据类型intVar...   self.entry01=Entry(self,textvariable=v1)   self.entry01.pack()   v1.set("admain")   print(v1.get());print(self.entry01.get())​​   #创建密码框   self.label02=Label(self,text='密码')   self.label02.pack()   v2=StringVar()   self.entry02=Entry(self,textvariable=v2,show='*')   self.entry02.pack()   v2.set("admain")   print(v2.get());   print(self.entry02.get())​   Button(self,text="登录",command=self.login).pack()​ deflogin(self):   #定义变量进行接收   username=self.entry01.get()   password=self.entry02.get()   print("去数据库比对用户名和密码")   print("用户名:"+username)   print(f"密码{password}")​   ifusername=="haha"andpassword=="110":     messagebox.showinfo('郑州大学','上岸成功!欢迎登录!')   else:     messagebox.showinfo('郑州大学','用户名或密码错误,登录失败')​​if__name__=='__main__': #创建根窗口对象 root=Tk() root.geometry('500x300-100-200') app=Application(master=root) root.mainloop()#事件循环
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-30 03:12 , Processed in 0.586872 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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