python(十九)——图形界面Tkinter下

532 阅读9分钟

目录

 

Spinbox控件

Menu顶层菜单

Menu鼠标右键菜单

Combobox下拉控件

Frame框架控件

tkinter

数据显示

表格数据

树状数据

布局

绝对布局

相对布局

表格布局

鼠标事件

鼠标点击事件

鼠标移动事件

鼠标释放事件

进入事件和离开事件

响应所有按键的事件

响应特殊按键的事件

组合按键事件


Spinbox控件

输入控件;与Entry类似,但是可以指定输入范围值

数值范围控件

例子:

win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")

sp = tkinter.Spinbox(win,from_=0,to=100)
sp.pack()

win.mainloop()

运行结果:  

可以给其设置步长,即每一次按跳转的数值多少,步长默认为1

sp = tkinter.Spinbox(win,from_=0,to=100,increment=5)

运行结果:  

给其绑定变量,赋值取值,赋值20,取值20

v = tkinter.StringVar() #绑定变量
sp = tkinter.Spinbox(win,from_=0,to=100,increment=5,textvariable = v)
sp.pack()
#赋值,取值
v.set(20)
print(v.get())

运行结果:  

command只要值改变就会执行对应的方法,可以添加一个方法,实时输出spinbox的值,command之后的方法不加()

v = tkinter.StringVar() #绑定变量
def fun():
    print(v.get())
sp = tkinter.Spinbox(win,from_=0,to=100,increment=5,textvariable = v,command = fun)
sp.pack()

运行结果:  

 

Menu顶层菜单

Menu菜单控件;显示菜单栏,下拉菜单和弹出菜单

例子:创建一个菜单

在创建菜单条menu0之后,未添加菜单选项时,菜单条是看不见的

使用.add_cascade()去添加菜单选项,使用add_command()去给菜单选项添加内容

#创建主窗口
win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#菜单条menu0
menu0 = tkinter.Menu(win)
win.config(menu = menu0)
#创建一个菜单选项
menu1 = tkinter.Menu(menu0,tearoff=False)
#给菜单选项添加内容
for i in ["python","java","c","c++","c#","javascript","css","html","PHP","退出"]:
    if i == "退出":
        menu1.add_command(label = i)
    else:
        menu1.add_command(label = i)
#向菜单条上添加菜单选项
menu0.add_cascade(label = "语言",menu = menu1)

win.mainloop()

运行结果:  

可以在退出前添加分割线

#创建一个菜单选项
menu1 = tkinter.Menu(menu0,tearoff=False)
menu2 = tkinter.Menu(menu0,tearoff=False)
#给菜单选项添加内容
for i in ["python","java","c","c++","c#","javascript","css","html","PHP","退出"]:
    if i == "退出":
        #添加分割线
        menu1.add_separator()
        menu1.add_command(label = i,command = win.quit)
    else:
        menu1.add_command(label = i,command = fun)
#向菜单条上添加菜单选项
menu0.add_cascade(label = "语言",menu = menu1)
menu0.add_cascade(label = "行动",menu = menu2)

运行结果:  

 

Menu鼠标右键菜单

使用win.bind给窗口绑定事件的方法去添加鼠标右键菜单,其中Button-3是鼠标右键

#菜单条menu1
menu0 = tkinter.Menu(win)
win.config(menu = menu0)
#创建一个菜单选项
menu1 = tkinter.Menu(menu0,tearoff=False)

#给菜单选项添加内容
for i in ["python","java","c","c++","c#","javascript","css","html","PHP","退出"]:
    if i == "退出":
        #添加分割线
        menu1.add_separator()
        menu1.add_command(label = i,command = win.quit)
    else:
        menu1.add_command(label = i,command = fun)
#向菜单条上添加菜单选项
menu0.add_cascade(label = "语言",menu = menu1)
def showMenu(event):
    #显示菜单,并设置其位置在鼠标右下方
    menu0.post(event.x_root,event.y_root)
#给窗口绑定一个事件,鼠标右键事件
win.bind("<Button-3>",showMenu)

运行结果:  

Combobox下拉控件

要使用combobox下拉控件,还需要导入

from tkinter import ttk

创建下拉控件例子:

win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#创建下拉控件
com = ttk.Combobox(win)
com.pack()

win.mainloop()

运行结果:  

给其设置下拉数据:

#设置下拉数据,用的是元组
com["value"] = ("老子","庄子","墨子","荀子")

运行结果:  

可以设置默认值,使用current(),参数为元组下标

#设置默认值,为元组中的下标
com.current(0)

给下拉控件绑定事件

def fun(event):
    print(com.get())
#绑定事件
com.bind("<<ComboboxSelected>>",fun)

运行结果: 

 

Frame框架控件

在屏幕上显示一个矩形区域,多作为容器控件

例子:

win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#创建一个frame
frm = tkinter.Frame(win)
frm.pack()
#左边
frm_left = tkinter.Frame(frm)
tkinter.Label(frm_left,text="左上",bg = "red").pack(side = tkinter.TOP)
tkinter.Label(frm_left,text="左下",bg = "blue").pack(side = tkinter.TOP)
frm_left.pack(side = tkinter.LEFT)
#右边
frm_right = tkinter.Frame(frm)
tkinter.Label(frm_right,text="右上",bg = "yellow").pack(side = tkinter.TOP)
tkinter.Label(frm_right,text="右下",bg = "green").pack(side = tkinter.TOP)
frm_right.pack(side = tkinter.RIGHT)
win.mainloop()

这个框架就是

 运行结果:

 

tkinter

 

数据显示

表格数据

要创建表格需要导入ttk 

from tkinter import ttk

例子:设置一张表

import tkinter
from tkinter import ttk

#创建主窗口
win = tkinter.Tk()
win.title("主界面")
win.geometry("500x200")
#表格
tree = ttk.Treeview(win)
tree.pack()
#定义列
tree["columns"] = ("姓名","年龄","身高","体重")
#设置列,现在列还不显示,列宽度为100
tree.column("姓名",width=100)
tree.column("年龄",width=100)
tree.column("身高",width=100)
tree.column("体重",width=100)

#设置表头
tree.heading("姓名",text="姓名-name")
tree.heading("年龄",text="年龄-age")
tree.heading("身高",text="身高-height")
tree.heading("体重",text="体重-weight")
win.mainloop()

 运行结果: 在姓名列前多了一个空白列,是为了等等说明是第几行

向表中添加数据("",行的下标,行名称,values数据)

#添加数据
tree.insert("",0,text="line1",values=("张三","12","175","120"))
tree.insert("",1,text="line2",values=("李四","25","190","140"))

运行结果:

 

树状数据

例子:创建一个树状数据

#创建主窗口
win = tkinter.Tk()
win.title("主界面")
win.geometry("500x200")
#表格
tree = ttk.Treeview(win)
tree.pack()
#添加一级树枝
tree1 = tree.insert("",0,"中国",text="China",values=("安徽"))
tree2 = tree.insert("",1,"美国",text="America",values=("USA"))
tree3 = tree.insert("",2,"英国",text="England",values=("UK"))

win.mainloop()

程序运行结果:

给一级树枝添加二级树枝

#添加二级树枝
tree1_1 = tree.insert(tree1,0,"广东",text = "China广东",values = ("adafa"))
tree1_2 = tree.insert(tree1,1,"云南",text = "China云南",values = ("adafdsa"))
tree1_3 = tree.insert(tree1,2,"浙江",text = "China浙江",values = ("adafa"))
tree2_1 = tree.insert(tree2,0,"夫利皮",text = "US夫利皮",values = ("adafa"))
tree2_2 = tree.insert(tree2,0,"真的皮",text = "US真的皮",values = ("adafa"))

程序运行结果: 

 

布局

绝对布局

改变窗口的大小,窗口变化,对内部的布局没有影响

例子:

label1 = tkinter.Label(win,text="first",bg="green")
label2 = tkinter.Label(win,text="second",bg="yellow")
label3 = tkinter.Label(win,text="third",bg="red")
#绝对布局
label1.place(x=0,y=0)
label2.place(x=10,y=30)
label3.place(x=50,y=80)

程序运行结果: 

     

 

相对布局

窗体改变对控件有影响

例子:

#创建主窗口
win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#
label1 = tkinter.Label(win,text="first",bg="green")
label2 = tkinter.Label(win,text="second",bg="yellow")
label3 = tkinter.Label(win,text="third",bg="red")
#绝对布局
label1.pack(fill=tkinter.Y,side=tkinter.LEFT)
label2.pack(fill=tkinter.X,side=tkinter.TOP)
label3.pack()

win.mainloop()

程序运行结果: 

    

 

表格布局

将布局设置为几行几列的样式

例子:将label1设置为0行0列,将label2设置为0行1列,将label3设置为1行0列

win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#
label1 = tkinter.Label(win,text="first",bg="green")
label2 = tkinter.Label(win,text="second",bg="yellow")
label3 = tkinter.Label(win,text="third",bg="red")
#表格布局  row行 column列
label1.grid(row = 0,column = 0)
label2.grid(row = 0,column = 1)
label3.grid(row = 1,column = 0)

win.mainloop()

程序运行结果: 

 

鼠标事件

Tkinter 按钮组件用于在 Python 应用程序中添加按钮,按钮上可以放上文本或图像,按钮可用于监听用户行为,能够与一个 Python 函数关联,当按钮被按下时,自动调用该函数。

语法

语法格式如下:

w = Button ( master, option=value, ... )

master: 按钮的父容器。

options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

序号可选项 & 描述
1activebackground当鼠标放上去时,按钮的背景色
2activeforeground当鼠标放上去时,按钮的前景色
3bd按钮边框的大小,默认为 2 个像素
4bg按钮的背景色
5command按钮关联的函数,当按钮被点击时,执行该函数
6fg按钮的前景色(按钮文本的颜色)
7font文本字体
8height按钮的高度
9highlightcolor要高亮的颜色
10image按钮上要显示的图片
11justify显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER
12padx按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离
13pady按钮在y轴方向上的内边距(padding)
14relief边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。
15state设置按钮组件状态,可选的有NORMAL、ACTIVE、 DISABLED。默认 NORMAL。
16underline下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推
17width按钮的宽度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小)
18wraplength限制按钮每行显示的字符的数量
19text按钮的文本内容
19anchor锚选项,控制文本的位置,默认为中心

鼠标点击事件

  • <Button-1>:鼠标左键单击
  • <Button-3>:鼠标右键单击
  • <Button-2>:鼠标滑轮单击
  • <Double-Button-1>:鼠标左键双击
  • <Triple-Button-1>:鼠标左键三击

点击输出鼠标的位置(x,y)

例子:点击按钮之后,会输出当前鼠标的位置x,y

win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#定义方法,输出鼠标位置
def fun1(event):
    print(event.x,event.y)
button1 = tkinter.Button(win,text = "leftmouse button")
#给按钮绑定事件
button1.bind("<Button-1>",fun1)
button1.pack()
win.mainloop()

 程序运行结果: 

  

 

鼠标移动事件

<B1-Motion>:鼠标左键移动

<B2-Motion>:鼠标中键移动

<B3-Motion>:鼠标右键移动

例子:鼠标左键按住后显示鼠标位置

def fun(event):
    print(event.x,event.y)
label = tkinter.Label(win,text="good morning")
label.pack()
label.bind("<B1-Motion>",fun)
win.mainloop()

 程序运行结果: 

  

 

鼠标释放事件

当释放鼠标时事件发生。

<ButtonRelease-1>:鼠标左键释放

<ButtonRelease-2>:鼠标中键释放

<ButtonRelease-3>:鼠标右键释放

例子:

def fun(event):
    print(event.x,event.y)
label.bind("<ButtonRelease-1>",fun)

 

进入事件和离开事件

<Enter>:当鼠标进入控件时事件发生

label.bind("<Entry>",fun)

 

<Leave>:当鼠标离开控件时事件发生

label.bind("<Leave>",fun)

 

响应所有按键的事件

<Key>:响应键盘的按键

例子:

#设置焦点
win.focus_set()
def fun(event):
    print("event.chr = ",event.char)
    print("event.keycode = ", event.keycode)
win.bind("<Key>",fun)
win.mainloop()

  

 

响应特殊按键的事件

<Shift_L> :左shift键

<Shift_R> :右shift键

<Return> :回车键

<BackSpace> :空格键

 

组合按键事件

Control-Alt-b :按住control+alt+b
Shift-Up :按住shift和向上键

例子:

#设置焦点
win.focus_set()
def fun(event):
    print("event.chr = ",event.char)
    print("event.keycode = ", event.keycode)
win.bind("<Control-Alt-b>",fun)
win.mainloop()

 

 

 

 

 

一起学习,一起进步 -.- ,如有错误,可以发评论