本文介绍了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')来进行设置窗口的大小和位置
# P1 Tkinter库
# P2 tkinter 主窗口
# geometry('wxh+/-x/y')来进行设置
from tkinter import *
from tkinter import messagebox
root = Tk() # 窗口对象
root.title('我的第一个GUI程序')
root.geometry('500x300+100+200')
# 组件
btn01 = Button(root)
btn01["text"] = "点我就送花"
# 布局管理器
btn01.pack() #
# 定义事件
def songhua(e): # e表示事件对象
messagebox.showinfo('Message', '送你一朵小红花')
print('爱你99')
# 事件绑定
btn01.bind("<Button-1>", songhua) # <Button-1>表示鼠标左键单击
root.mainloop() # 窗口 调用组件的mainloop()方法,进入事件循环
3. GUI编程整体描述_重要组件汇总
4. GUI程序的景点面向对象写法
# P4 GUI程序的景点面向对象写法 """测试一个经典的GUI程序写法,使用面向对象的方式""" from tkinter import * from tkinter import messagebox # Frame 是一个组件 class Application(Frame): def __init__(self, master=None): super().__init__(master) # 调用父类Frame的方法 self.master = master self.pack() #布局管理器 self.createWidget() def createWidget(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() def songhua(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(Python Imaging Library,现在更常用的是Pillow库)来加载和处理更广泛的图像格式(如JPEG、PNG等),然后将这些图像作为Label
的image
属性来显示。
关于Label
组件的常用功能和几个简单介绍:
1. 显示文本
Label
组件最基本的功能就是显示文本。你可以通过text
参数来指定要显示的文本内容。
from tkinter import Tk, Label
root = Tk()
label = Label(root, text="Hello, Tkinter!")
label.pack()
root.mainloop()
2. 显示图像
为了显示图像,你需要先加载图像,然后将其作为Label
的image
属性。注意,对于非GIF图像,你可能需要使用Pillow库。
from tkinter import Tk, Label
from PIL import Image, 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="Colored Text", fg="blue", bg="yellow")
4. 锚点和位置
你可以通过anchor
参数来设置文本或图像在Label
中的锚点位置(如左上角、中心、右下角等),以及通过布局管理器(如pack()
, grid()
, place()
)来控制Label
在窗口中的位置。
label = Label(root, text="Centered Text", anchor="center") label.pack(expand=True) # 使用pack时,expand=True可以让Label扩展以填充整个窗口
5. 响应事件
虽然Label
本身不是为交互设计的,但你可以通过将其与事件(如鼠标点击)绑定来创建简单的交互。不过,这通常需要与另一个组件(如Button
)结合使用,或者通过自定义的方式来捕捉事件。
def on_click(event):
print("Label clicked!")
label = Label(root, text="Click Me")
label.bind("<Button-1>", on_click) # 绑定鼠标左键点击事件
label.pack()
请注意,直接在Label
上绑定事件并不是常见的做法,因为它主要是为显示信息而设计的。对于需要用户交互的场景,使用Button
或Canvas
等组件可能更合适。
实例代码展示:
# P5 Label组件_tkinter中图像正确显示全局变量的写法
from tkinter import *
# from tkinter import messagebox
class Application(Frame):
def __init__(self, master=None):
super().__init__(master) # 调用父类Frame的方法
self.master = master
self.pack() #布局管理器
self.createWidget()
def createWidget(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()
# 显示图像
global photo #设置为全局变量,如果是局部变量本方法执行完毕后,图像对象会被销毁,窗口不会显示图像
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(锚点)位置控制
import tkinter as tk
def on_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控件。
# p8
from tkinter import *
from tkinter import messagebox
# Frame 是一个组件
class Application(Frame):
def __init__(self, master=None):
super().__init__(master) # 调用父类Frame的方法
self.master = master
self.pack() #布局管理器
self.createWidget()
def createWidget(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()
def login(self):
# 定义变量进行接收
username = self.entry01.get()
password = self.entry02.get()
print("去数据库比对用户名和密码")
print("用户名:"+username)
print(f"密码{password}")
if username == "haha" and password == "110":
messagebox.showinfo('郑州大学', '上岸成功!欢迎登录!')
else:
messagebox.showinfo('郑州大学', '用户名或密码错误,登录失败')
if __name__ == '__main__':
# 创建根窗口对象
root = Tk()
root.geometry('500x300-100-200')
app = Application(master=root)
root.mainloop() # 事件循环