大家好,小编来为大家解答以下问题,python控制台程序学生信息管理系统,python编写学生管理系统,用gui做ui,现在让我们一起来看看吧!
python数据分析和可视化基础
TkinterTkinter模块的概念导入模块1.创建窗口的操作实例化窗口对象调用窗口设置窗口大小设置窗口位置设置窗口的标题设置窗口的图标否能够改变窗口设置窗口的背景2.创建容器组件的操作容器组件的介绍组件参数的介绍label标签label添加标签控件label添加标签定位label的relief参数label的cursor参数label的font参数label的bitmap参数label的image参数entry输入框entry添加输入框定位entry的show参数entry的get方法readonly状态button按钮添加按钮组件设计按钮功能按钮被点击的样式重复触发禁用按钮布局设置(pack,grid,place)、packgridplaceFrame框架LabelFrame文本框架LabelFrame的labelwidget参数Toplevel创建新的窗口Checkbutton 多选框Checkbutton创建多选框Checkbutton的variable参数Checkbutton的indicatoron参数Radiobutton 单选框Menu 菜单Menu创建窗口菜单Menu的添加菜单内容Menu的分层菜单Menu的菜单快捷键Menu的菜单分割线Menu的菜单快捷触发Menu的弹出菜单Menubutton 菜单Listbox 列表框创建Listbox虚拟事件<<ListboxSelect>>see方法Scrollbar 滚动条OptionMenu 下拉菜单Text 多行文本输入框设置Text撤销和重做关闭窗口
Tkinter
Tkinter模块的概念
Tkinter是Python的标准GUI库,它提供了丰富的组件和布局管理器,能够帮助我们快速地创建图形用户界面应用程序。
导入模块
python3
import tkinter
pytohn2
import Tkinter # 开头的t是大写的
1.创建窗口的操作
实例化窗口对象
tk = ()
调用窗口
会显示一个真实的窗口,接下来整个丰富GUI的操作使用的代码,都是放在这2句代码中间
tk.mainloop()
设置窗口大小
tk.geometry("800x500") #宽x高 不用*
设置窗口位置
tk.geometry("800x500+374+182") #程序窗口左角距离电脑左上角的坐标也即是距离
设置窗口的标题
tk.title("hackone的目录GPT改写工具")
设置窗口的图标
tk.iconbitmap("") # 添加自己图片的路径
否能够改变窗口
tk.resizable(False, False) # 设置为false就是固定窗口大小 不能更改
设置窗口的背景
tk.config(bg="blue")
2.创建容器组件的操作
容器组件的介绍
组件参数的介绍
大多数组件的类也都有一些共同的参数 组件也有一些共同的方法:
label标签
label添加标签控件
text参数指定显示的文本 font参数指定字体大小和字体样式 fg参数指定字体颜色
label = Label(tk,text="URL",font=("宋体",22),fg="blue") #tk是master父容器 不指定不会显示在主窗口的
font=("黑体", 20, "bold", "italic", "underline", "overstrike")
label添加标签定位
只有调用grid()方法,定位后,才会显示
() # ()等价于(row=0,column=0)
label的relief参数
组件边框的样式,一共有6种relief,分别是flat, groove, raised, ridge, solid, sunken
label = Label(tk,text="URL",font=("宋体",22),fg="blue",relief="sunken")
label的cursor参数
指定鼠标移动到组件上时,光标的样子
label = Label(tk,text="URL",font=("宋体",22),fg="blue",relief="sunken",cursor="hand2")
label的font参数
font参数指定字体的样式、大小、以及是否有加粗下划线等特殊样式,字体的特殊样式,一共有bold(加粗), italic(斜体),underline(下划线),overstrike(删除线)
Label(tk, text="叠加", font=("黑体", 20, "bold", "italic", "underline", "overstrike")).grid()
label的bitmap参数
bitmap=“error”,即内置图标,有error, info, hourglass, questhead, question, warning, gray12, gray25, gray50, gray75 compound=“left” 图片在文字的左边
label = tkinter.Label(tk,text="error",bitmap="error",compound="left",font=("宋体",22),fg="blue")
label的image参数
在Label中添加图片
image = PhotoImage(file=r"C:\Users\liyang\Pictures\Saved Pictures\")
Label(tk, image=image, text="It's a monster.", compound="top").grid()
在Label中添加jpg图片需要使用pillow工具 导入时 import PIL
from tkinter import *
from PIL import Image, ImageTk
tk = Tk()
image = ImageTk.PhotoImage((""))
Label(root, image=image, text="It's a monster.", compound="top").grid()
tk.mainloop()
tkinter也有一些内部的图片,可以通过字符串传递给image。
from tkinter import *
tk = Tk()
for image in ["::tk::icons::error",
"::tk::icons::information",
"::tk::icons::question",
"::tk::icons::warning"]:
Label(tk, text=image, image=image, compound="top").grid()
tk.mainloop()
entry输入框
entry添加输入框定位
entry是一个文本框组件可以在里面输入文本 entry的方法
entry = Entry(tk,font=("宋体",25),fg="black")
(row=1,column=10)
# row=0,column=1表示我们将输入框控件,放在第1行第2列的位置
entry的show参数
可以使输入里面的内容显示为一个*或其他指定字符
entry = Entry(tk,font=("宋体",25),fg="black",show="*").grid()
entry的get方法
获取文本框的值
entry = Entry(tk)
()
def entryget():
print(())
button = Button(tk, text="显示", command=entryget).pack()
readonly状态
Entry可以设置为state="readonly",也就是只读状态。处于readonly的Entry不能被输入,但是用户可以选中Entry里面插入的内容,当然也可以复制。如果是disabled状态,用户不但不能输入,而且不能选中里面的内容。
button按钮
添加按钮组件
Button的参数和Label基本参数是通用的,也支持text, image, bitmap
button = tkinter.Button(tk,text="开始GPT改写",font=("宋体",14),fg="black")
设计按钮功能
Button即按钮,可以绑定一个回调函数,用户点击时将会执行这个函数。
def mulu():
print("显示GPT改写目录")
command=mulu 点击执行mulu 这个函数
button = tkinter.Button(tk,text="开始GPT改写",font=("宋体",14),fg="black",command=mulu)
按钮被点击的样式
我们可以设置点击时按钮的前景和背景颜色:
Button(root, text="按钮", activeforeground="blue", activebackground="yellow")
重复触发
长按在按钮上,经过repeatdelay毫秒的延迟后,按钮将会重复触发,每次触发的间隔是repeatinterval毫秒。
def func():
print("开始GPT改写")
button = Button(tk, text="开始GPT改写", font=("宋体", 25), fg="black", repeatdelay=1, repeatinterval=5,
command=func())
禁用按钮
所有组件都有state参数,表示组件的状态。一共有三个状态:normal, disabled, active。默认的state是normal,此时用户可以点击按钮。而处于disabled禁用的按钮,用户将无法点击。active则是激活状态。
Button(root, text="按钮", state="disabled")
布局设置(pack,grid,place)、
pack
side:组件靠哪个方向排放,可以是"top", “bottom”, “left”, “right”,分别是上下左右,默认是"top"
button = Button(tk, text="开始GPT改写", font=("宋体", 25), fg="black")
(side=BOTTOM)
anchor:当排放组件的可用空间要多于所需空间时,组件靠哪个方向排放,可选项是八个方位和中心(n, s, w, e, nw, ne, sw, se, center)。默认是"nw"。
button = Button(tk, text="开始GPT改写", font=("宋体", 25), fg="black")
(anchor=CENTER)
expand:组件适应窗口。如设置为True,当窗口中有别的可用空间时,将会自动把组件居中摆放,并且拖拽后仍然适应窗口大小。默认为False。组件的填充,可选项有"x", “y”, “both”, “none”,分别表示:x方向填充,y方向填充,两个方向都填充,无填充
button = Button(tk, text="开始GPT改写", font=("宋体", 25), fg="black")
((expand=1, fill=BOTH))
(expand=True)
padx和pady:分别表示组件与外部容器在x轴和y轴的间隔。可以只提供一个数字,表示左右间隔或上下间隔,也可以提供一个两个项的元组表示左右间隔或上下间隔。不一定要一起设置。
button = Button(tk, text="开始GPT改写", font=("宋体", 25), fg="black")
(padx=100, pady=60) #左右间隔100,上下间隔60
ipadx和ipady:表示内部与组件边框的间隔
button = Button(tk, text="开始GPT改写", font=("宋体", 25), fg="black")
(ipadx=10, ipady=10)
grid
grid可以实现网格布局,根据行和列指定组件的位置
row和column:分别指定组件排列的行和列,row和column指定以0为起点,第一行就是row=0。
button = Button(tk, text="开始GPT改写", font=("宋体", 25), fg="black")
(row=0, column=0)
(row=1, column=0)
(row=0, column=1)
(row=1, column=1)
rowspan和columnspan:rowspan表示组件占几行的大小,columnspan表示组件占几列的大小。
button = Button(tk, text="开始GPT改写", font=("宋体", 25), fg="black")
(grid(row=0, column=1, rowspan=2))
sticky:在pack布局中和anchor类似,表示组件的方位,同时也可以达到fill的功能。可以提供八个方位+center,来指定组件在可用空间中的排列位置。
button = Button(tk, text="开始GPT改写", font=("宋体", 25), fg="black")
(row=1, column=0, sticky="e")
place
place布局适用于更加复杂的,需要准确摆放组件的容器,需要提供xy坐标以及组件的width和height x和y:组件在x轴和y轴上的位置,单位为像素
在这里插入代码片
width和height:指定组件排放时的宽和高
在这里插入代码片
anchor:组件的锚选项,可选有八个方位,以及center
在这里插入代码片
relx和rely:组件在x轴或y轴相对于整个容器的位置,是一个0-1之间的浮点数,表示组件位于整个容器的位置。比如想要把组件的x设在容器30%的位置,则可以把位置设为0.3.如果想要把组件居中,就设置relx=0.5, rely=0.5, anchor=“center”。
在这里插入代码片
relwidth和relheight:指定组件相对于容器的宽与高,是一个0-1之间的浮点数。组件宽是容器宽的50%,则可以把relwidth设置为0.5.
在这里插入代码片
Frame框架
方便组件的排放
fr = Frame(root)
(padx=5, pady=5)
button = Button(fr, text="开始GPT改写", font=("宋体", 25), fg="black").pack(side="left")
button = Button(fr, text="开始GPT改写", font=("宋体", 25), fg="black").pack(side="left")
button = Button(fr, text="开始GPT改写", font=("宋体", 25), fg="black").pack(side="left")
LabelFrame文本框架
可以在左上方显示一段文本或是一个组件
fr = LabelFrame(root, text="LabelFrame")
(fill="both", padx=4)
Button(fr, text="1").pack()
Button(fr, text="2").pack()
LabelFrame的labelwidget参数
上面显示的一段文字可以把它替换为别的组件
fr = LabelFrame(root, text="LabelFrame",labelwidget=Button(root, text="按钮"))
(fill="both", padx=4)
Button(fr, text="1").pack()
Button(fr, text="2").pack()
Toplevel创建新的窗口
Toplevel可以用来创建一个新的窗口,它必须继承一个窗口,可以是Tk,也可以是Toplevel
from tkinter import *
tk = Tk()
top = Toplevel(tk)
mainloop()
Checkbutton 多选框
多选框,用户可以勾选或取消勾选
Checkbutton创建多选框
def ck():
print("选中/取消选中")
cb = Checkbutton(tk, text="连续GPT改写", command=ck)
()
Checkbutton的variable参数
def ck():
print("当前状态为:", ())
cb_var = BooleanVar()
cb = Checkbutton(tk, text="连续GPT改写", command=ck, variable=cb_var)
()
Checkbutton的indicatoron参数
一种是上面的勾选框样式,还可以设置为一个按钮盒的样式
tk = Tk()
tk.geometry("200x200")
cb = Checkbutton(root, text="连续GPT改写", indicatoron=False)
()
Radiobutton 单选框
单选框 value参数的作用是:指定单选框选中时绑定的Var的值
Radiobutton(tk, text="A. Python", variable=var, value="A").pack()
当variable的值被设为单选框的value,那么这个选框将是选中的状态。当点击单选按钮,variable的值就被设为这个单选按钮的值。因为variable的值只能有一个,所以你只能在绑定该variable的单选按钮里面选中一个单选按钮。
var = StringVar()
("A")
Radiobutton(tk, text="A. Python", variable=var, value="A").pack()
Radiobutton(tk, text="B. C", variable=var, value="B").pack()
Radiobutton(tk, text="C. Java", variable=var, value="C").pack()
Menu 菜单
Menu也就是菜单,菜单一般有两种,一种是窗口上的菜单,一种是弹出式菜单。
Menu创建窗口菜单
menubar = Menu(tk)
tk.config(menu=menubar) #把菜单绑定tk
Menu的添加菜单内容
menubar = Menu(tk)
tk.config(menu=menubar)
menubar.add_command(label="Click", command=lambda:print("Hello")) # 点击菜单的Click按钮,就会执行print("Hello")
Menu的分层菜单
menubar = Menu(tk)
tk.config(menu=menubar)
filemenu = Menu(menubar)
filemenu.add_command(label="Save", command=lambda:print("OK!")) #子菜单
menubar.add_cascade(label="File", menu=filemenu)
子菜单添加子菜单
menubar = Menu(tk)
tk.config(menu=menubar)
filemenu = Menu(menubar)
savemenu = Menu(filemenu)
menubar.add_cascade(label="File", menu=filemenu)
filemenu.add_cascade(label="Save", menu=savemenu)
savemenu.add_command(label="save1")
savemenu.add_command(label="save2")
Menu的菜单快捷键
menubar = Menu(tk)
tk.config(menu=menubar)
def new(event=None):
print("New file")
fm = Menu(menu)
menu.add_cascade(label="File", menu=fm)
fm.add_command(label="New", accelerator="Ctrl+N", command=new)
("<Control-n>", new)
Menu的菜单分割线
add_separator方法 add_separator方法可以给菜单添加一条分割线
menubar = Menu(tk)
tk.config(menu=menubar)
fm = Menu(menu, tearoff=False)
menu.add_cascade(label="File", menu=fm)
fm.add_command(label="New File")
fm.add_command(label="Save")
fm.add_separator() #添加分割线
fm.add_command(label="Exit")
Menu的菜单快捷触发
underline参数指定一个索引,绑定一个Alt快捷键。指定了underline的菜单项可以快捷触发。触发方式是:先按下Alt,然后下划线会显示出来,再按下菜单项标签下划线上的字符即可执行这个菜单项
menu = Menu(root)
root.config(menu=menu)
def new():
print("New file")
menu.add_command(label="New", underline=0, command=new)
Menu的弹出菜单
当右击鼠标时在鼠标处弹出菜单 弹出窗口需要使用post方法,需要提供x, y两个参数。但这两个参数必须是屏幕上的位置,x_root和y_root。
menu = Menu(root)
def show(event):
(event.x_root, event.y_root)
def cp():
print("Copy")
menu.add_command(label="Copy", underline=0, command=cp)
("<Button-3>", show)
Menubutton 菜单
Menubutton是一个Button的样式,可以绑定一个菜单,点击后弹出菜单。这个组件比较老,现在可以用Menu实现Menubutton的功能了,不过Menubutton在某些情况下要更简单好用一些
mb = Menubutton(root, text="弹出")
()
menu = Menu(mb)
def cp():
print("Copy")
menu.add_command(label="Copy", command=cp)
mb.config(menu=menu)
Listbox 列表框
列表框,里面可以添加一些文本项目,在列表框中竖向显示
创建Listbox
root = Tk()
lb = Listbox(root)
()
虚拟事件<>
lb = Listbox(root)
()
for n in range(20):
lb.insert("end", n)
def select(event):
print(lb.curselection()) #打印选中项的索引
("<<ListboxSelect>>", select)
see方法
see方法可以滚动列表框,使位于index位置的项目可见
lb = Listbox(root)
()
for n in range(20):
lb.insert("end", n)
Button(root, text="see end", ("end")).pack()
Scrollbar 滚动条
滚动条,可以起到滚动组件,使用户能够完整看到的效果。但也有部分组件不支持滚动条
sb = Scrollbar(root)
(side="right", fill="y")
orient参数 orient参数指定滚动条的朝向。部分组件也有这个方法,都有两个可选值:“horizontal”(水平,横向), “vertical”(垂直,竖向)
sb = Scrollbar(root)
(side="right", fill="y")
lb = Listbox(root, )
(side="left", fill="both")
for i in range(100):
lb.insert("end", i)
sb.config(command=lb.yview)
OptionMenu 下拉菜单
var = StringVar()
("Python") #设置OptionMenu的值
m = OptionMenu(root, var, "Python", "C", "Java")
m.pack()
Text 多行文本输入框
Text是多行文本输入框,和Entry不同的是,Entry只有单行。并且Text里面不仅能够插入文本,还可以插入图片、组件等,还可以有标记功能,对于特殊的内容改变颜色。
设置Text
text = Text(root)
()
撤销和重做
设置undo=True,然后用户可以按Ctrl+Z来撤销
text = Text(root, undo=True)
text = Text(root, undo=1)
()
Button(root, text="Undo", command=text.edit_undo).pack()
Button(root, text="Redo", command=text.edit_redo).pack()
关闭窗口
destroy()
原文地址1:https://blog.csdn.net/qq_43422402/article/details/136092319
参考资料:python中用turtle画一个圆形 https://blog.csdn.net/SXIAOYAN_/article/details/140061099