根窗口Tk
import tkinter as tk # 导入
window = tk.Tk() # 实例化
window.title('My Window') # 设置窗口名字
window.geometry('500x300') # 设置窗口大小
window.mainloop() #窗口循环显示
顶层Toplevel
与Frame类似,但是它包含窗体属性(如Title)
标签Label
Label:显示一个文本或图象。
大纲
1.显示文本
2.显示图像
1.显示文本
l = tk.Label(window, #标签基于window窗口
text='你好!this is Tkinter', #标签初始值
bg='green', #标签背景颜色
fg='white', #标签字体颜色
font=('Arial', 12), #标签字体与字号
width=30, height=2)#标签长高
l.pack() #放置标签
详
#标签值
#标签值常量
text='你好!this is Tkinter'
#标签值变量
textvariable=var
#其中var = tk.StringVar(),将label标签的内容设置为字符类型
#标签长高
width=30, height=2
#长和高指字符长和高,height=2,为标签有2个字符高
# 放置标签
l.pack()
l.place()
#有两种,区别是:
2.显示图像
按钮Button
Button:包含文本或图象。按钮关联Python函数或方法。当按钮按下,调用相关联的函数或方法。
大纲
1.文本按钮
2.图像按钮
b = tk.Button(window, #按钮基于window窗口
text='hit me', #按钮初始值
font=('Arial', 12), #按钮字体和字号
width=10, height=1, #按钮长高
command=hit_me) #按钮关联的函数
b.pack() #放置按钮
详
#按钮关联的函数
command
#调用函数写法def hit_me():
bind
#调用函数写法def hit_me(even):
#使用方法:窗体对象.bind(事件类型,回调函数)
t=Label(window, text='标签')
t.bind(, hit_me) # 鼠标左键点击时调用函数
#事件类型
#表示鼠标左键单击
#表示鼠标中键单击
#表示鼠标右键单击
#表示A键被按下
#表示按下Ctrl和V键
#表示按下的是F1键
单行文本框Entry
e = tk.Entry(window,
show=None, # 显示成明文形式
#show='*', # 显示成密文形式
font=('Arial', 14)) #文本框字体字号
e.pack() #放置文本框
多行文本框Text
t = tk.Text(window, height=3)
t.pack()
#文本框值的显示
var = entry.get() #获得单行文本框内值
var = text.get('i.j', 'end')#获得多行文本框内值(从i行j列开始,0.0)
t.insert('insert', var) #文本框光标处传入var值
t.insert('end', var) #文本框最后处传入var值
e2.delete(0,'end') #清除单行文本框内容
t2.delete('0.0','insert') #清除多行文本框内容
滚动文本框
text与scroll结合
#需要引入模块
from tkinter import scrolledtext
#scrolledtext.ScrolledText像Text一样使用即可
菜单Menu
#创建菜单
menubar = tk.Menu(window)
# 创建menubar子菜单栏1filemenu
filemenu = tk.Menu(menubar, tearoff=0)
# 菜单menubar添加子菜单,子菜单为filemenu,名称定为'File'
menubar.add_cascade(label='File', menu=filemenu)
# 子菜单filemenu添加触发单元,触发单元触发do_job函数,名称定为New、Open、Save
filemenu.add_command(label='New', command=do_job)
filemenu.add_command(label='Open', command=do_job)
filemenu.add_command(label='Save', command=do_job)
# 创建filemenu子菜单栏submenu
submenu = tk.Menu(filemenu, tearoff=0)
# 菜单filemenu添加子菜单,子菜单为submenu,名称定为Import'
filemenu.add_cascade(label='Import', menu=submenu)
# 子菜单submenu添加触发单元,触发单元触发do_job函数,名称定为'Submenu_1'
submenu.add_command(label='Submenu_1', command=do_job)
#放置菜单
window.config(menu=menubar)
框架Frame
# 创建主frame,基于window窗口
frame = tk.Frame(window)
frame.pack()
# 创建次frame,基于frame
frame_l = tk.Frame(frame)
frame_r = tk.Frame(frame)
frame_l.pack(side='left')
frame_r.pack(side='right')
弹窗messageBox
import tkinter.messagebox # 要使用messagebox先要导入模块
tkinter.messagebox.showinfo(title='Hi', message='你好!') # 提示信息对话窗
tkinter.messagebox.showwarning(title='Hi', message='有警告!') # 提出警告对话窗
tkinter.messagebox.showerror(title='Hi', message='出错了!') # 提出错误对话窗
print(tkinter.messagebox.askquestion(title='Hi', message='你好!')) # 询问选择对话窗return 'yes', 'no'
print(tkinter.messagebox.askyesno(title='Hi', message='你好!')) # return 'True', 'False'
print(tkinter.messagebox.askokcancel(title='Hi', message='你好!')) # return 'True', 'False'
import tkinter.messagebox # 要使用messagebox先要导入模块
def hit_me():
tkinter.messagebox.showinfo(title='Hi', message='你好!') # 提示信息对话窗
# tkinter.messagebox.showwarning(title='Hi', message='有警告!') # 提出警告对话窗
# tkinter.messagebox.showerror(title='Hi', message='出错了!') # 提出错误对话窗
# print(tkinter.messagebox.askquestion(title='Hi', message='你好!')) # 询问选择对话窗return 'yes', 'no'
# print(tkinter.messagebox.askyesno(title='Hi', message='你好!')) # return 'True', 'False'
# print(tkinter.messagebox.askokcancel(title='Hi', message='你好!')) # return 'True', 'False'
# 按钮触发
tk.Button(window, text='hit me', bg='green', font=('Arial', 14), command=hit_me).pack()
三种放置方式pack/grid/place
基于A的控件B1默认居中于A顶部
基于A的控件B2默认居中于A顶部,在B1下方
控件位置由pack()决定
B1.pack(side=‘left’) B1在A最左侧
B2.pack(side=‘right’)B2在A最右侧
1. 方格Grid
for i in range(3):
for j in range(3):
tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10)
以上的代码就是创建一个三行三列的表格,其实 grid 就是用表格的形式定位的。这里的参数 row 为行,colum 为列,padx 就是单元格左右间距,pady 就是单元格上下间距,ipadx是单元格内部元素与单元格的左右间距,ipady是单元格内部元素与单元格的上下间距。
button1.grid(row=2, column=0, sticky=W)
sticky=W指靠西方位,即左
2. Pack
上下左右排列
tk.Label(window, text='P', fg='red').pack(side='top') # 上
tk.Label(window, text='P', fg='red').pack(side='bottom') # 下
tk.Label(window, text='P', fg='red').pack(side='left') # 左
tk.Label(window, text='P', fg='red').pack(side='right') # 右
3. Place
给精确的坐标来定位,如此处给的(50, 100),就是将这个部件放在坐标为(x=50, y=100)的这个位置, 后面的参数 anchor=‘nw’,就是前面所讲的锚定点是西北角。
tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=50, y=100, anchor='nw')
显示与隐藏
控件
widget.pack() #显示
widget.pack_forget() #隐藏
窗口
window.withdraw() #隐藏
window.destroy() #关闭
window.update() #显示中可有可无
window.deiconify() #显示
通过控件、容器的不断关闭显示,实现主窗口中页面的载入。
局部变量变全局变量
global x