文章目录
目录
前言
-
Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
一、tkinter是什么?
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序
二、使用步骤
1.引入库
from tkinter import *
2.创建一个GUI程序
import tkinter
root = tkinter.Tk()
root.title("TK标题") # 设置tk标题
root.geometry("850x750+500+50") # 宽850、高750、在屏幕500、50的位置显示
root.mainloop() # 进入消息循环
3.Tkinter 组件
-
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。目前有15种Tkinter的部件。我们提出这些部件以及一个简短的介绍,在下面的表:
控件 描述 Button 按钮控件;在程序中显示按钮。 Canvas 画布控件;显示图形元素如线条或文本 Checkbutton 多选框控件;用于在程序中提供多项选择框 Entry 输入控件;用于显示简单的文本内容 Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 Label 标签控件;可以显示文本和位图 Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户 Menubutton 菜单按钮控件,用于显示菜单项。 Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单 Message 消息控件;用来显示多行文本,与label比较类似 Radiobutton 单选按钮控件;显示一个单选的按钮状态 Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间 Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。. Text 文本控件;用于显示多行文本 Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似 Spinbox 输入控件;与Entry类似,但是可以指定输入范围值 PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。 LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。 tkMessageBox 用于显示你应用程序的消息框。 标准属性
标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。
属性 描述 Dimension 控件大小; Color 控件颜色; Font 控件字体; Anchor 锚点; Relief 控件样式; Bitmap 位图; Cursor 光标;
3.1、button 按钮
Button(root, text="退出", command=quit).grid(row=0, column=0)
# text:按钮显示的文本;command:点击后执行的方法
3.2、Lable 标签
Label(root, text="标签").grid(row=0, column=0, pady=5, padx=5)
# text:显示的文本,pady:与y轴隔开5个像素, padx:与x轴隔开5个像素
3.3、Listbox 列表框
from tkinter import *
root = Tk()
root.geometry("300x200+100+100")
l1 = Listbox(root)
l1.grid(padx=10)
for i in range(10):
l1.insert(END,i*1000)
root.mainloop()
3.4、Menu 菜单
import tkinter as tk
def callback():
print("~被调用了~")
root = tk.Tk()
# 创建一个顶级菜单
menubar = tk.Menu(root)
# 创建一个下拉菜单“文件”,然后将它添加到顶级菜单中
filemenu = tk.Menu(menubar, tearoff=False)
filemenu.add_command(label="打开", command=callback)
filemenu.add_command(label="保存", command=callback)
filemenu.add_separator() # 分割线
filemenu.add_command(label="退出", command=root.quit)
menubar.add_cascade(label="文件", menu=filemenu)
# 创建另一个下拉菜单“编辑”,然后将它添加到顶级菜单中
editmenu = tk.Menu(menubar, tearoff=False)
editmenu.add_command(label="剪切", command=callback)
editmenu.add_command(label="拷贝", command=callback)
editmenu.add_command(label="粘贴", command=callback)
menubar.add_cascade(label="编辑", menu=editmenu)
# 显示菜单
root.config(menu=menubar)
root.mainloop()
3.5、message 消息框
# 正常提示框
tkinter.messagebox.showinfo("提示框标题", "提示文本")
# 警告提示框
tkinter.messagebox.showwarning("提示框标题", "提示文本")
# 错误提示框
tkinter.messagebox.showerror("提示框标题", "提示文本")
# 显示“是|否”,是:yes,否:no
tkinter.messagebox.askquestion("标题", "提示文本")
# 显示“确定|取消”, 确定:True,取消:False
tkinter.messagebox.askokcancel("标题", "提示文本")
# 显示“是|否”,是:True,否:False
tkinter.messagebox.askyesno("标题","提示文本")
# 显示“是|否|取消”, 是:True, 否:False, 取消:None
tkinter.messagebox.askyesnocancel("标题","提示文本")
# 警告提示框,显示“重试|取消”, 重试:True, 取消:False
tkinter.messagebox.askretrycancel("标题","提示文本")
3.6、Radiobutton 单选框
import tkinter as tk
root = tk.Tk()
v = tk.IntVar()
#Radiobutto是单选框,只能选中一个
#选中哪一个按钮,会把value的值赋给v
for i in(("one", 1), ("two", 2), ("three", 3)):
a1 = tk.Radiobutton(root, text=i[0], variable=v, value=i[1])
a1.grid()
#显示v的值
l = tk.Label(root,textvariable=v)
l.grid()
tk.mainloop()
3.7、Checkbutton 复选框
import tkinter as tk
root = tk.Tk()
v = []
for i in range(4): # 设置4个变量储存选择框选择状态
v.append(tk.IntVar())
GIRLS = ['西施', '貂蝉', '王昭君', '杨玉环']
for index, name in enumerate(GIRLS):
b = tk.Checkbutton(root, text=name, variable=v[index]) # 设置复选框,选择为1,不选为0
b.pack(side=tk.LEFT)
for i in v:
tk.Label(root, textvariable=i).pack(side=tk.LEFT) # 用label显示选中状态
tk.mainloop()
3.8、Scrollbar 滚动条
Scrollbar 滚动条通常用于实现 listbox,canvas,text 文本框的滚动,也可以用于输入框的滚动设置,如果设置输入框的滚动只能设置 x 方向上的。
# -*- coding:utf-8-*-
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("400x400")
root.columnconfigure(0, weight=1)
tv = ttk.Treeview(root, height=10, columns=('c1', 'c2', 'c3'))
for i in range(100):
tv.insert('', i, values=('a' + str(i), 'b' + str(i), 'c' + str(i)))
tv.pack()
# ----vertical scrollbar------------
vbar = ttk.Scrollbar(root, orient=VERTICAL, command=tv.yview) # 设置y垂直移动
tv.configure(yscrollcommand=vbar.set)
tv.grid(row=0, column=0, sticky=NSEW)
vbar.grid(row=0, column=1, sticky=NS)
# ----horizontal scrollbar----------
hbar = ttk.Scrollbar(root, orient=HORIZONTAL, command=tv.xview) # 设置x水平移动
tv.configure(xscrollcommand=hbar.set)
hbar.grid(row=1, column=0, sticky=EW)
root.mainloop()
3.9、Toplevenl 二级窗口
from tkinter import *
def start():
global top
top = Toplevel()
top.geometry("200x200+400+500")
top.mainloop()
def stop():
top.destroy()
root = Tk()
root.geometry("200x200+300+200")
Button(root, text="开个窗口", command=start).grid()
Button(root, text="关闭窗口", command=stop).grid()
root.mainloop()
3.10、canvas 画布
w = Canvas ( master, option=value, ... )
-
master: 按钮的父容器。
-
options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。
序号 | 可选项 & 描述 |
---|---|
1 | bd 边框宽度,单位像素,默认为 2 像素。 |
2 | bg 背景色 |
3 | confine 如果为 true (默认), 画布不能滚动到可滑动的区域外。 |
4 | cursor 光标的形状设定,如arrow, circle, cross, plus 等 |
5 | height 高度 |
6 | highlightcolor 要高亮的颜色 |
7 | relief 边框样式,可选值为 FLAT、SUNKEN、RAISED、GROOVE、RIDGE。 默认为 FLAT。 |
8 | scrollregion 一个元组 tuple (w, n, e, s) ,定义了画布可滚动的最大区域,w 为左边,n 为头部,e 为右边,s 为底部。 |
9 | width 画布在 X 坐标轴上的大小。 |
10 | xscrollincrement 用于滚动请求水平滚动的数量值。 |
11 | xscrollcommand 水平滚动条,如果画布是可滚动的,则该属性是水平滚动条的 .set()方法。 |
12 | yscrollincrement 类似 xscrollincrement, 但是垂直方向。 |
13 | yscrollcommand 垂直滚动条,如果画布是可滚动的,则该属性是垂直滚动条的 .set()方法。 |
Canvas 组件支持以下标准选项:
arc − 创建一个扇形
coord = 10, 50, 240, 210
arc = canvas.create_arc(coord, start=0, extent=150, fill="blue")
image − 创建图像
filename = PhotoImage(file = "sunshine.gif")
image = canvas.create_image(50, 50, anchor=NE, image=filename)
line − 创建线条
line = canvas.create_line(x0, y0, x1, y1, options) # x0,y0为线段的起点,x1,y1为线段的终点
dash_line = canvas.create_line(x0, y0, x1, y1, dash=(4, 4)) # 虚线
oval − 创建一个圆
oval = canvas.create_oval(x0, y0, x1, y1, options)
polygon − 创建一个至少有三个顶点的多边形
oval = canvas.create_polygon(x0, y0, x1, y1,...xn, yn, options)
delete − 删除画布的组件
canvas.create_text(x, y, text="文本", tag="canvas")
canvas.create_text(x0, y0, x1, y1, tag="canvas")
canvas.delete("canvas")
itemconfigure − 配置画布中的组件
canvas = tkinter.Canvas(root)
canvas.grid()
def set(number):
if number > 0:
canvas.itemconfigure(t1, text="我是大于0", fill="red") # t1是组件
else:
canvas.itemconfigure(t1, text="我是小于或等于0", fill="green")
t1 = canvas.create_text(100, 200, text="")
number = randint(-100, 100)
set(number)
bind − 获取鼠标位置
def moved(event):
print(event.x, event.y)
canvas.bind("<Motion>", moved)