|
本文介绍了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*fromtkinterimportmessageboxroot=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,Labelroot=Tk()label=Label(root,text="Hello,Tkinter!")label.pack()root.mainloop()2.显示图像为了显示图像,你需要先加载图像,然后将其作为Label的image属性。注意,对于非GIF图像,你可能需要使用Pillow库。fromtkinterimportTk,LabelfromPILimportImage,ImageTkroot=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*#fromtkinterimportmessageboxclassApplication(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(锚点)位置控制importtkinterastkdefon_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()#事件循环
|
|