菜单menu
from tkinter import *
root= Tk()
def lab():
label0=Label(root,text="hello world")
label0.grid(column=0)
root.geometry("800x480")#窗口大小
menu0=Menu(root)#参数是父级控件
for x in ['文件','编辑','视图']:
menu0.add_command(label=x,command=lab)#添加3个一级菜单
#二级菜单
cascade0=Menu(menu0,tearoff=False)#tearoff=False 表示这个菜单不可以被拖出来
for x in ['添加新项','添加现有项']:
cascade0.add_command(label=x,command=lab)
cascade0.add_separator()#分割线
cascade0.add_checkbutton(label="在不调试的情况下启动")#单选框
cascade0.add_separator()#分割线
cascade0.add_radiobutton(label="添加引用")#多选框
cascade0.add_radiobutton(label="添加服务")#多选框
menu0.add_cascade(label='项目',menu=cascade0)#在menu0中添加一个label为项目的级联菜单
root['menu']=menu0#窗口root的menu是menu0
root.mainloop()
滚动条Scrollbar
单独
from tkinter import *
root= Tk()
def scrollCall(moveto, pos):
# 如何得到两个参数:使用如下打印中的信息,可以看到解释器传给scrollCall函数的两个参数,一个为
# moveto,参考手册可以得知,它是当拖动slider时调用的函数;另一个参数为slider的当前位置,我们
# 可以通过set函数来设置slider的位置,因此使用这个pos就可以完成控制slider的位置。
scrollbar.set(pos, 0)
print(pos)
#root.geometry("1280x720")#大小
scrollbar = Scrollbar(root,orient=HORIZONTAL,command=scrollCall)
scrollbar.pack(side = BOTTOM,fill =X)#必须填充
root.mainloop()
与listbox 列表框配合
from tkinter import *
root = Tk()
lb = Listbox(root)
scrollbarx = Scrollbar(root,orient=HORIZONTAL)
scrollbary = Scrollbar(root)
scrollbarx.pack(side = BOTTOM,fill = X)
scrollbary.pack(side = RIGHT,fill = Y)
#root.geometry("1280x720")
#side指定Scrollbar为居右;fill指定填充满整个剩余区域,到WM在时候再详细介绍这几个属性。
#下面的这句是关键:指定Listbox的yscrollbar的回调函数为Scrollbar的set
lb['xscrollcommand'] = scrollbarx.set
lb['yscrollcommand'] = scrollbary.set
for i in range(100):
lb.insert(END,str(i)*20)
#side指定Listbox为居左,
lb.pack(side = LEFT,fill=BOTH)
#下面的这句是关键:指定Scrollbar的command的回调函数是Listbar的yview
scrollbary['command'] = lb.yview
scrollbarx['command'] = lb.xview
root.mainloop()
使用grid布局
from tkinter import *
root= Tk()
def scrollCall(moveto, pos):
# 如何得到两个参数:使用如下打印中的信息,可以看到解释器传给scrollCall函数的两个参数,一个为
# moveto,参考手册可以得知,它是当拖动slider时调用的函数;另一个参数为slider的当前位置,我们
# 可以通过set函数来设置slider的位置,因此使用这个pos就可以完成控制slider的位置。
scrollbar.set(pos, 0)
list.insert(END,pos)
#root.geometry("1280x720")#大小
scrollbar = Scrollbar(root,command=scrollCall)
scrollbar.grid(column=0,row=0,sticky=NS)
#sticky 意思是组件紧靠所在单元格的某一边角。
# 取值有:N,S,E,W,NS,EW,NE,SW
#(默认为CENTER)
list=Listbox(root)
list.grid(row=0,column=1)
root.mainloop()
控件调用函数
from tkinter import *#相当于命名空间
root= Tk()
def lab():
label0=Label(root,text="label1")
label0.grid(column=0)
def p(event):#要加event
print("hello world")
root.title("hello world")#窗口标题
#第一种
btn0=Button(root,text="button",command=lab)#按下调用函数lab
btn0.grid(row=0,column=0,sticky=EW)
#第二种
btn1=Button(root,text="button")
btn1.grid(row=0,column=1)
btn1.bind("",p)#鼠标左键,按下调用函数p
"""
1.我们在使用 bind 函数的时候事件
2.表示鼠标左键单击,3 右,2中
3.表示 A 键被按下
4.表示按下的是 Ctrl 和 V 键
5.表示按下的是 F1 键"""
ent=Entry(root)#输入框
ent.grid(row=1,column=0)
ent['show']="*"#掩码
ent.bind("",p)#在输入框按下回车,调用函数p
btn0['background']="blue"
print(btn0["text"])
root.mainloop()
消息框与文件选择对话框
from tkinter import *#相当于命名空间
from tkinter.messagebox import *#相当于命名空间
from tkinter.filedialog import *
root= Tk()
file = askopenfilename()#打开选择文件窗口
showinfo(title="hello world",message=file)
#还有其它showwarning,showerror,askquestion,askokcancel,askyesno,askretryignore.
root.mainloop()