控件 | 描述 |
---|---|
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 | 光标; |
几何方法 | 描述 | 用法 |
---|---|---|
pack() | 包装; | 简单的四种方位确定 |
grid() | 网格; | 表格式确定 |
place() | 位置; | 坐标式确定 |
基本流程:
创建窗口对象 —> 设置窗口title、宽高 —> 添加各种控件(为控件定义功能函数(变量等等))—> 装填控件
import tkinter as tk
window = tk.Tk() #创建窗口对象
window.title('my window') #设置界面标题
window.geometry('700x500') #设置界面大小宽*高
var = tk.StringVar() #定义一个字符串变量
l = tk.Label(window,textvariable = var,bg = 'pink',font = ('Arial',12),width = 50, height = 25) #设置标签界面
l.pack() #将小部件放到主窗口中
on_hit = False
def hit_me():
global on_hit #定义一个全局变量
if on_hit == False:
on_hit = True
var.set('你好哇,李银河!') #设置var的值
else:
on_hit = False
var.set('')
b = tk.Button(window, text='点我呀', width = 15, height = 2, command = hit_me) #设置一个按钮,command调用函数
b.pack()
window.mainloop()
import tkinter as tk
window = tk.Tk()
window.title('一个没有感情的复读机')
window.geometry('700x500')
e = tk.Entry(window, show = None) #,设置entry控件,show可以指定显示的字符如密码'*'
e.pack()
def insert_this():
var = e.get()
t.insert('insert', var)
def insert_end():
var = e.get()
t.insert('end', var)
b1 = tk.Button(window, text='复读到这', width=15, height=2, command=insert_this)
b1.pack()
b2 = tk.Button(window, text='复读到文末', width=15, height=2, command=insert_end)
b2.pack()
t = tk.Text(window, height=2) #设置Text控件
t.pack()
window.mainloop() #运行并不断刷新界面
import tkinter as tk
window = tk.Tk()
window.title('你听过最浪漫的话是什么')
window.geometry('700x500')
var1 = tk.StringVar() #创建字符串变量
l = tk.Label(window, bg='#6f9dff', width=50, textvariable=var1)
l.pack()
def print_selection():
value = lb.get(lb.curselection()) #获取选择的值
var1.set(value) #将选择的值赋给var1(传入Lable控件)
b1 = tk.Button(window, text='是这一句没错了', width=15, heigh=2, command=print_selection)
b1.pack()
var2 = tk.StringVar()
str_1 = '祝你今天快乐,明天的快乐留着我明天祝'
str_2 = '漫天繁星像一场冻结了的大雨'
str_3 = '白天你的影子在你身边,夜晚影子化成无形的夜包裹着我的睡眠'
str_4 = '我将忤逆我的本能去爱你'
str_5 = '你快回来,我一人承受不来'
str_6 = '情长纸短,吻你万千'
var2.set((str_1, str_2, str_3))
lb = tk.Listbox(window, listvariable=var2, width=50) #定义一个选择列表
lb.pack()
list_items=(str_4,str_5,str_6)
for item in list_items: #循环插入456选项值
lb.insert('end', item)
lb.insert(1,'不要点我~~~') #插入一个选项到第1位
lb.insert(2, '充数')
lb.delete(2) #删除第二个选项
window.mainloop()
import tkinter as tk
window = tk.Tk()
window.title('选一条唯美的句子吧')
window.geometry('500x250')
l = tk.Label(window, bg='#abedc3', width=50, height=3, text='展示台')
l.pack()
def print_selection():
l.config(text=var.get()) #更改Label标签中的text值为var.get()
var = tk.StringVar()
r1 = tk.Radiobutton(window, text='OptionA', variable=var,
value='云朵偷喝了我放在屋顶上的酒于是她脸红变成了晚霞', command=print_selection) #设置一个选择按钮
r1.pack()
r2 = tk.Radiobutton(window, text='OptionB', variable=var,
value='我们逃走吧,日暮,银河,别再梦里', command=print_selection)
r2.pack()
r3 = tk.Radiobutton(window, text='OptionC', variable=var,
value='秋天该很好,你若尚在场,秋风即使带凉,亦漂亮', command=print_selection)
r3.pack()
window.mainloop()
import tkinter as tk
window = tk.Tk()
window.title('一个尺度列表')
window.geometry('500x250')
def print_selection(v): #v是传入s表单的选择值
l.config(text='大概是'+v+'年吧')
s = tk.Scale(window, label='很久是多久', from_=1, to=10, orient=tk.HORIZONTAL, length=400, showvalue=0, tickinterval=2, resolution=1, command=print_selection)
'''
设置一个尺度表单,
orient是方向(HORIZONTAL是横向),
showvalue是实时显示选中的值(布尔型,0就是false),
tickinterval是表单划分尺度,
resolution是精度(1是精确到整数)
'''
s.pack()
l = tk.Label(window, bg='yellow', width=20, height=2, text='empty')
l.pack()
window.mainloop()
import tkinter as tk
window = tk.Tk()
window.title('你喜欢谁的诗嘞')
window.geometry('500x250')
l = tk.Label(window, bg='#abedc3', width=50, height=3, text='empty')
l.pack()
def print_selection():
if (var_1.get()==0) & (var_2.get()==1):
l.config(text='人生得意须尽欢,莫使金樽空对月')
elif (var_1.get()==1) & (var_2.get()==0):
l.config(text='无边落木萧萧下,不尽长江滚滚来')
elif (var_1.get())==1 & (var_2.get())==1:
l.config(text='李白:杜甫和我之间只能选一个,哼!->_->')
elif (var_1.get())==0 & (var_2.get())==0:
l.config(text='来吧选一个,小老弟')
var_1 = tk.IntVar()
var_2 = tk.IntVar() #定义两个整型变量
c1 = tk.Checkbutton(window, text='杜甫', variable=var_1,
onvalue=1, offvalue=0, command=print_selection) #设置一个Checkbutton多选选项,若选中则赋值为1,否则为0
c2 = tk.Checkbutton(window, text='李白', variable=var_2,
onvalue=1, offvalue=0, command=print_selection)
c1.pack()
c2.pack()
window.mainloop()
import tkinter as tk
window = tk.Tk()
window.title('一个小画布')
window.geometry('500x250')
canvas = tk.Canvas(window, bg='#abedc3', height=200, width=400) #设置一个画布
image_flie = tk.PhotoImage(file='nice.gif')
image = canvas.create_image(0,0,anchor='nw',image=image_flie) #设置图片位置,从坐标(0,0)开始,anchor定义锚点位置
x0, y0, x1, y1 = 50, 50, 80, 80
line = canvas.create_line(x0, y0, x1, y1) #设置一条线段
oval = canvas.create_oval(10, 10, x1, y1,fill='yellow') #设置一个圆形
arc = canvas.create_arc(x0+50, y0+50, x1+50, y1+50,start=0,extent=180) #设置一个扇形
rect = canvas.create_rectangle(10, 10, 50, 50) #设置一个正方形
canvas.pack()
def moveit():
canvas.move(rect,0,2) #每点击一次按钮,正方形向下移动2给单位
canvas.move(oval,2,0) #每点击一次按钮,圆形向右移动2个单位
b = tk.Button(window, text='move', command=moveit).pack()
window.mainloop()
anchor属性的值:
运行结果:
注:圆形位置的确定以正方形作为参考
代码很长,别害怕重复的很多
import tkinter as tk
window = tk.Tk()
window.title('一个菜单')
window.geometry('500x500')
l = tk.Label(window, text='', bg='yellow')
l.pack()
l_2 = tk.Label(window, text='', bg='pink')
l_2.pack()
def anser():
l_2.config(text='够了,谢谢妈妈,妈妈真好!')
def do_job1():
l.config(text='蒜苔炒肉,吃,吃大块滴,两块够吗?')
l_2.config(text='')
def do_job2():
l.config(text='洋葱炒肉,吃,吃大块滴,两块够吗?')
l_2.config(text='')
def do_job3():
l.config(text='毛血旺,吃,吃大块滴,两块够吗?')
l_2.config(text='')
def do_job4():
l.config(text='西红柿草鸡蛋,吃,吃大块滴,两块够吗?')
l_2.config(text='')
def do_job5():
l.config(text='肉末茄子,吃,吃大块滴,两块够吗?')
l_2.config(text='')
def do_job6():
l.config(text='炸土豆片,吃,吃大块滴,两块够吗?')
l_2.config(text='')
b = tk.Button(window, text='回复', width=15, height=2, command=anser).pack()
var = tk.StringVar()
menubar = tk.Menu(window) #设置一个菜单,包含在window界面中
#第一个选项集
pigmenu = tk.Menu(menubar, tearoff=0) #设置一个选项集包含在menubar菜单中
menubar.add_cascade(label='荤菜', menu=pigmenu) #设置一个父级选项包含在pigmenu选项集中
pigmenu.add_command(label='蒜苔炒肉', command=do_job1) #设置以下三个子选项
pigmenu.add_command(label='洋葱炒肉', command=do_job2)
pigmenu.add_command(label='毛血旺', command=do_job3)
pigmenu.add_separator() #设置一个分割线
pigmenu.add_command(label='朕只想吃素的', command=window.quit) #点击此选项将退出程序
#第二个选项集(流程同上)
caimenu = tk.Menu(menubar,tearoff=0)
menubar.add_cascade(label='素菜', menu=caimenu)
caimenu.add_command(label='西红柿草鸡蛋', command=do_job4)
caimenu.add_command(label='肉末茄子', command=do_job5)
caimenu.add_command(label='炸土豆片', command=do_job6)
caimenu.add_separator()
caimenu.add_command(label='朕可不是吃素的', command=window.quit)
window.config(menu=menubar) #将window界面的菜单改为menubar
window.mainloop()
import tkinter as tk
window = tk.Tk()
window.title('一个框架')
window.geometry('500x250')
tk.Label(window, text='一份心情,一种喜悦!').pack()
frm = tk.Frame(window) #设置一个大框架,包含在window界面
frm.pack()
frm_l = tk.Frame(frm) #设置一个子框架,包含在大框架frm中
frm_r = tk.Frame(frm) #设置一个子框架,包含在大框架frm中
frm_l.pack(side='left') #设置子框架frm_l在大框架的左侧
frm_r.pack(side='right') #设置子框架frm_r在大框架的右侧
tk.Label(frm_r, text='疯子在右').pack() #设置以下三个标签分别在三个子框架内
tk.Label(frm_r, text='疯子在右').pack()
tk.Label(frm_l, text='天才在左').pack()
window.mainloop()
import tkinter as tk
from tkinter import messagebox
window = tk.Tk()
window.title('一个消息弹窗')
window.geometry('500x250')
def normal():
tk.messagebox.showinfo(title='好哇', message='程序运行成功!')
def warning():
tk.messagebox.showwarning(title='警告', message='程序出错啦!')
def error():
tk.messagebox.showerror(title='错误', message='我靠,程序出现致命错误')
def askquestion():
tk.messagebox.askquestion(title='询问', message='我可以亲你一下吗?') #若选‘是’则返回yes,选‘否’返回no
def askretrycancel():
tk.messagebox.askretrycancel(title='询问2', message='你是李银河吧?') #设置重试取消按钮,返回True或Fasle
def askokcancel():
tk.messagebox.askokcancel(title='询问3', message='你认识马冬梅吗?') #设置确定取消按钮,确定返回True,取消返回False
tk.Button(window, text='成功', command=normal).pack()
tk.Button(window, text='警告', command=warning).pack()
tk.Button(window, text='错误', command=error).pack()
tk.Button(window, text='询问', command=askquestion).pack()
tk.Button(window, text='询问2', command=askretrycancel).pack()
tk.Button(window, text='询问3', command=askokcancel).pack()
window.mainloop()
实例: