分享基本步骤代码。
Label&Button标签按钮
窗口主体框架
主题框架包含:主窗口(window)及主窗口的一些基本属性(标题大小)
让窗口活起来(window.mainloop())
import tkinter as tk
window = tk.Tk()
window.title(‘my window’)
window.geometry(‘200x100’)
#这里是窗口内容
window.mainloop()
窗口内容
l = tk.Label(window,
text=‘OMG!this is TK!’, #标签的文字
bg = ‘green’, #背景颜色
font =(‘Arial’,12), #字体和字体大小
width = 15,height = 2 #标签长宽
)
l.pack() #固定窗口位置
var = tk.StringVar() #这时文字变量储存器
l = tk.Label(window,
textvariable = var, #使用textvariabele替换text,因为这个可以变化
bg = ‘green’,font = (‘Arial’,12),width = 15,height=2)
l.pack()
b = tk.Button(window,
text = ‘hit me’, #显示在按钮上的文字
width=15,height = 2,
command=hit_me) #点击按钮式执行的命令
b.pack() #按钮位置
on_hit = False #默认初始状态为False
def hit_me():
globel on_hit
if on_hit == False: #从False状态变成True状态
on_hit = True
var.set(‘you hit me’) #设置标签文字为‘you hit me’
else: #从True状态变为False状态
on_hit = False
var.set(’’) #设置 文字为空
Entry&Text输入,文本框
窗口主体框架
主题框架包含:主窗口(window)及主窗口的一些基本属性(标题大小)
让窗口活起来(window.mainloop())
import tkinter as tk
winddow = tk.Tk()
window.title(‘my window’)
#窗口尺寸
window.geometry(‘200x100’)
#显示出来
window.mainloop()
窗口内容
创建按钮分别触发两种情况
b1 = tk.Button(window,text=“insert point”,width=15,height=2,command=insert_point)
b1.pack()
b2 = tk.Button(window,text=“insert end”,command= insert_end)
b2 = pack()
创建输入框entry,用户输入任何内容都显示为*
e = tk.Entry(window,show=’*’)
e.pack()
创建一个文本框用于显示
t = tk.Text(window,height=2)
t.pack()
定义触发事件的函数。函数一定要放在按钮的上面
def insert_point():
var = e.get()
t.insert(‘insert’,var)
def insert_end():
var = e.get()
t.insert(‘end’,var)
Listbox列表部件
创建主窗口
winddow = tk.Tk()
window.title(‘my window’)
window.geometry(‘200x100’)
创建一个label用于显示
var1 = tk.StringVar() #创建变量
l = tk.Label(window,bg = ‘yellow’,width=4,textvariable = var1)
l.pack()
创建一个方法用于按钮的点击事件
def print_selection():
value = lb.get(lb.curselection()) #获取当前选中的文本
var1.set(value) #为label设置值
创建一个按钮
b1 = tk.Button(window,text=“print selection”,width=15,
height=2,command=print_selection)
b1.pack()
创建一个Listbox和变量var2,并将var2的值赋给Listbox
var2 = tk.StringVar()
var2.set((11,22,33,44)) #为变量设置值
#创建Listbox
lb = tk.Listbox(window,listvariable = var2) #将var2的值赋给Listbox
#创建一个list并将值驯化添加到Listbox控件中
list_items = (1,2,3,4)
for item in list_items:
lb.insert(‘end’,item) #从最后一个位置开始加入值
lb.insert(1,‘first’) #在第一个位置加入’first’字符
lb.insert(2,‘second’) #在第二个位置加入"second"字符
lb.delete(2) #删除第二个位置的字符
lb.pack()
#显示主窗口
window.mainloop()
Radiobutton 选择按钮
radiobutton部件
首先我们需要定义一个var用来将radiobutton 的值和Label的值联系在一起,然后创建一个randobutton部分:
var = tk.StringVar()
l = tk.Label(window,bg=‘yellow’,width=20,text=‘empty’)
l.pack()
r1 = tk.Radiobutton(window,text=‘Option A’,
variable=var,value=‘A’,
command=print_selection )
r1.pack()
其中variable=var一整句的意思是当我们鼠标选中了其中一个选项,把value的值A放到变量var中,然后赋值给variable
触发功能
print_selection功能就是选择了某个radiobutton后我们会在屏幕上打印的选项:
def print_selection():
l.config(text=‘you have selected’ + var.get())
Scale尺度
scale部件
s = tk.Scale(window,label-‘try me’,from_=5,to=11,orient=tk.HORIZONTAL,
length=200,showvalue=0,tickinterval=2,resolution=0.01,command=print_selection)
s.pack()
这里的参数label是指scale部件的名称,即在这里scale部件名称为try me
触发功能
l= tk.Label(window,bg=‘yellow’,width=20,text=‘empty’)
l.pack()
def print_selection(v):
l.config(text=‘you have selected’ + v)
Checkbutton勾选项
Checkbutton部件
var1 = tk.IntVar()
c1 = tk.Checkbutton(window,text=‘Python’,variable=var1,onvalue=1,offvalue=0,
command=print_selection)
c1.pack()
触发功能
def print_selection():
if (var1.get() == 1) & (var2.get() == 0): #如果选中第一个选项,未选中第二个选项
l.config(text='I love only Python ')
elif (var1.get() == 0) & (var2.get() == 1): #如果选中第二个选项,未选中第一个选项
l.config(text=‘I love only C++’)
elif (var1.get() == 0) & (var2.get() == 0): #如果两个选项都未选中
l.config(text=‘I do not love either’)
else:
l.config(text=‘I love both’) #如果两个选项都选中
Canvas画布
Canvas部件
canvas = tk.Canvas(window, bg=‘blue’, height=100, width=200)
canvas.pack()
image_file = tk.PhotoImage(file=‘ins.gif’)
image = canvas.create_image(10, 10, anchor=‘nw’, image=image_file)
x0, y0, x1, y1= 50, 50, 80, 80
line = canvas.create_line(x0, y0, x1, y1)
oval = canvas.create_oval(x0, y0, x1, y1, fill=‘red’) #创建一个圆,填充色为
red
红色
arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=180) #创建一个扇形
rect = canvas.create_rectangle(100, 30, 100+20, 30+20) #创建一个矩形
触发功能
def moveit():
canvas.move(rect, 0, 2)
Menubar菜单
menubar 部件
先需要加入一个 M enubar 作为整体框架, 然后再在 Menubar 中加一些部件.
menubar = tk.Menu(window)
定义一个空菜单单元
filemenu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label=‘File’, menu=filemenu)
filemenu.add_command(label=‘New’, command=do_job)
filemenu.add_command(label=‘Open’, command=do_job)##同样的在File
中加入Open
小菜单
filemenu.add_command(label=‘Save’, command=do_job)##同样的在File
中加入Save
小菜单
filemenu.add_separator()##这里就是一条分割线
filemenu.add_command(label=‘Exit’, command=window.quit)
submenu = tk.Menu(filemenu)##和上面定义菜单一样,不过此处实在
File
上创建一个空的菜单
filemenu.add_cascade(label=‘Import’, menu=submenu, underline=0)##给放入的菜单submenu
命名为Import
submenu.add_command(label=“Submenu1”, command=do_job)##这里和上面也一样,在Import
中加入一个小菜单命令Submenu1
触发功能
counter = 0
def do_job():
global counter
l.config(text='do '+ str(counter))
counter+=1
Frame 部件
tk.Label(window, text=‘on the window’).pack()
frm = tk.Frame(window)
frm.pack()
frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)
frm_l.pack(side=‘left’)
frm_r.pack(side=‘right’)
tk.Label(frm_l, text=‘on the frm_l1’).pack()##这个
label
长在frm_l
上,显示为on the frm_l1
tk.Label(frm_l, text=‘on the frm_l2’).pack()##这个label
长在frm_l
上,显示为on the frm_l2
tk.Label(frm_r, text=‘on the frm_r1’).pack()##这个label
长在frm_r
上,显示为on the frm_r1
pack grid place放置位置
pack
首先我们先看看我们常用的pack(), 他会按照上下左右的方式排列.
tk.Label(window, text=‘1’).pack(side=‘top’)#上
tk.Label(window, text=‘1’).pack(side=‘bottom’)#下
tk.Label(window, text=‘1’).pack(side=‘left’)#左
tk.Label(window, text=‘1’).pack(side=‘right’)#右
place
tk.Label(window, text=1).place(x=20, y=10, anchor=‘nw’)
grid
for i in range(4):
for j in range(3):
tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10)
messagebox部件
tk.Button(window, text=‘hit me’, command=hit_me).pack()
通过触发功能,调用messagebox
def hit_me():
tk.messagebox.showinfo(title=‘Hi’, message=‘hahahaha’)
这里点击button按钮就会弹出提示对话窗
下面给出几种形式
tk.messagebox.showinfo(title=’’,message=’’)#提示信息对话窗
tk.messagebox.showwarning()#提出警告对话窗
tk.messagebox.showerror()#提出错误对话窗
tk.messagebox.askquestion()#询问选择对话窗
如果给出如下定义就是打印出我们所选项对应的值
def hit_me():
print(tk.messagebox.askquestion(title=‘Hi’, message=‘hahahaha’))
print(tk.messagebox.askquestion())#返回yes和no
print(tk.messagebox.askokcancel())#返回true和false
print(tk.messagebox.askyesno())#返回true和false
print(tk.messagebox.askretrycancel())#返回true和false
参考链接:
https://morvanzhou.github.io/tutorials/python-basic/tkinter/2-08-menubar/