Python-GUI编程(Tkinter)

Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序,由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。

创建一个窗口

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

#进入消息循环
win.mainloop()

label(标签)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

'''
Label:标签控件可以显示文本
'''
#win是父窗体
#text 显示的文本内容
#bg  背景色
#fg  字体颜色
#font  字体,大小,为一个元组
#wraplength  指定text文本中多宽进行换行
#justify  设置换行后的对齐方式
#anchor  位置 n(north) e(east) w(west) s(south) center(居中,默认) ne(north-east) se(south-east) sw(south-west) nw(north-west)
label= tkinter.Label(win,
                     text="hello world",
                     bg = "pink",
                     fg = "red",
                     font = ("黑体",15),
                     width=15,
                     height=3,
                     wraplength=200,
                     justify="left",
                     anchor="ne")


#显示出来
label.pack()

#进入消息循环
win.mainloop()

button(按钮)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


def func():
    print("fang is a good man!")
#创建按钮
button1 = tkinter.Button(win,text="button",command=func,width="8",height="2")
button1.pack()

button2 = tkinter.Button(win,text="button2",command=lambda:     #匿名函数lambda
                         print("fang is a kind person!"))
button2.pack()

button3 = tkinter.Button(win,text="quit",command=win.quit)      #退出
button3.pack()


#进入消息循环
win.mainloop()

entry(输入框)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

'''
#绑定变量
e = tkinter.Variable()

entry = tkinter.Entry(win,textvariable=e)    #给输入框的文本绑定一个变量
entry.pack()

#e就代表输入框这个对象
#设置值
e.set("fangweijie")
#取值
print(e.get())
print(entry.get())
'''
e = tkinter.Variable()  #
entry = tkinter.Entry(win,textvariable=e)       #给输入框中的文本绑定一个变量,textvariable:可变文本
entry.pack()
def func():
    print(entry.get())
button1 = tkinter.Button(win,text="输出",command=func,width="6",height="1")   #指定按钮回调函数
button1.pack()

#进入消息循环
win.mainloop()

text(文本窗口)

import tkinter

#创建主窗口
win = tkinter.Tk()
#设置标题
win.title('fang')

#设置大小和位置
#win.geometry('400x400+200+30')


#创建滚动条
scroll= tkinter.Scrollbar()



#显示多行文本
text= tkinter.Text(win,width="36",height="5")
scroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)
text.pack(side=tkinter.LEFT,fill=tkinter.Y)
#关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)

str = '''sdfasdfsdvsdfbgvdcfazdsfbhdfvcbxcdfbdxfbfgbfgbfgbbdfbfvbfbgf
bbdfghndfvbfdsghdffbfdggbsdfbgfbdfgbgfdfghngfnfgngfngfangweijiejustwe
are vdkjsavavjccrarecarewidthheightfvbgfbdfghdfgnbhdxfghdfghdfvgbdgfb
dbdsbdfbsdvbbbsvbsbdfbdcsfhvahhadcfebggbfbsehjsrtbnadsfbsrgfhsrfedbaf
cahdfsdnffasngweijireindsdjieweijieifangshengwodeshenaquanqfangchuang'''

text.insert(tkinter.INSERT,str)

check_button(复选按钮)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

def updata():
    message=""
    if hobby1.get()==True:
        message+="money\n"
    if hobby2.get()==True:
        message+="power\n"

    #清空text中的所有内容
    text.delete(0.0,tkinter.END)
    #将字符串插入到text控件
    text.insert(tkinter.INSERT,message)


hobby1 = tkinter.BooleanVar()       #返回给变量一个布尔值
check1 = tkinter.Checkbutton(win,text="money",variable=hobby1,command=updata)
check1.pack()
hobby2 = tkinter.BooleanVar()
check2 = tkinter.Checkbutton(win,text="power",variable=hobby2,command=updata)
check2.pack()

text = tkinter.Text(win,width=50,height=5)
text.pack()

#进入消息循环
win.mainloop()

radio_button(单选按钮)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

def updata():
    print(r.get())
r = tkinter.IntVar()
radiobutton1 = tkinter.Radiobutton(win,text="power",value=1,variable=r,command=updata)
radiobutton1.pack()
radiobutton2 = tkinter.Radiobutton(win,text="money",value=2,variable=r,command=updata)
radiobutton2.pack()

#进入消息循环
win.mainloop()

listbox(列表框)

  • 1
import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

#列表框控件,可包含一个或者多个文本框:在listbox空间的小窗口显示一个字符串
LB = tkinter.Listbox(win,selectmode=tkinter.BROWSE)
LB.pack()
#循环,按顺序添加
for item in ["f","a","n","g","w","e","i","jie"]:
    LB.insert(tkinter.END,item)

#在开头添加
LB.insert(tkinter.ACTIVE,"cool")
#将列表当成一个元素添加
LB.insert(tkinter.END,["12","342"])
#删除,参数1为开始的索引,参数2未结束的索引,如果不指定参数2,只删除第一个索引出的内容
LB.delete(1,3)
LB.delete(1)

#选中,参数1为开始的索引,参数2未结束的索引,如果不指定参数2,只选中第一个索引出的内容
LB.select_set(1,3)
#LB.select_set(2)

#取消选中
LB.select_clear(2)

#获取到列表中的元素的个数
print(LB.size())

#从列表中取值,参数1为开始的索引,参数2未结束的索引,如果不指定参数2,只获取第一个索引出的内容
print(LB.get(1,3))
print(LB.get(4))

#换回当前的索引项,不是item元素
print(LB.curselection())

#判断一个选项是否被选中
print(LB.selection_includes(1))
print(LB.selection_includes(4))


#进入消息循环
win.mainloop()

  • 2
import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')



#绑定变量
LV = tkinter.StringVar()
#与BORWSE相似,但是不支持鼠标按下后移动选中位置
LB = tkinter.Listbox(win,selectmode=tkinter.SINGLE,listvariable=LV)
LB.pack()
for item in ["good","nice","handsome","vd","xs"]:
    LB.insert(tkinter.END ,item)

#打印当前列表中的选项
print(LV.get())
#设置选项
#LV.set(("1","2","3"))

#绑定事件
def myPrint(event):
    print(LB.get(LB.curselection()))
LB.bind("<Double-Button-1>",myPrint)


#进入消息循环
win.mainloop()
  • 3
import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
#win.geometry('400x400+200+30')




#EXTENDED 可以使listbox支持shift和control
LB = tkinter.Listbox(win,selectmode=tkinter.EXTENDED)
LB.pack()
for item in ["good","nice","handsome","vd","xs","good","nice","handsome","vd","xs","good","nice","handsome","vd","xs"]:
    LB.insert(tkinter.END ,item)

#按住Shift,可以实现连选
#按住Ctrl,可以实现多选

#加滚动条
sc = tkinter.Scrollbar(win)
sc.pack(side=tkinter.RIGHT,fill=tkinter.Y)
LB.configure(yscrollcommand=sc.set)
LB.pack(side=tkinter.LEFT,fill=tkinter.BOTH)
sc['command'] = LB.yview


#进入消息循环
win.mainloop()

  • 4
import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

#MULTIPLE 支持多选
LB = tkinter.Listbox(win,selectmode=tkinter.MULTIPLE)
LB.pack()
for item in ["good","nice","handsome","vd","xs"]:
    LB.insert(tkinter.END ,item)

#进入消息循环
win.mainloop()

scale_control(缩放控制)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

#供用户通过拖拽指示器改变变量的值,可以水平,也可以竖直
#tkinter.HORIZONTAL 水平
#tkinter.VERTICAL   竖直
#length   水平时表示宽度,竖直时表示高度
#tickinterval    选择值将会为该值的倍数

scale= tkinter.Scale(win,from_=0,to=100,orient=tkinter.VERTICAL,
                     tickinterval=20,length=200)
scale.pack()


#设置值
scale.set(20)
#获取值
def showNum():
    print(scale.get())
tkinter.Button(win,text="button",command=showNum).pack()
#print(scale.get())

#进入消息循环
win.mainloop()

spin_box(数值设定框)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


#绑定个变量
V = tkinter.StringVar()

def update():
    print(V.get())
#数值范围控件

#increment  步长,默认为一
#values 最好不要与from_=0,to=10,increment=1同时使用
#command  只要值改变就会执行对应的方法
spinbox = tkinter.Spinbox(win,from_=0,to=50,increment=1,values=(0,2,4,6,8,10,12,14,16,18,20),
                          textvariable=V,command=update)
spinbox.pack()

#赋值
V.set(20)
#取值
print(V.get())

#设置值
#进入消息循环
win.mainloop()

top_menu(顶部菜单)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


def func():
    print("*********")

def PY():
    #print(menu1.get())---error
     print("人生苦短,我用python!")
#顶层菜单

#菜单条
menubar = tkinter.Menu(win)
win.config(menu=menubar)

menu1 = tkinter.Menu(menubar,tearoff=False)
#给菜单选项添加内容
for item in ["python","c","c++","java","JS","PHP","node.js","quit"]:
    if item =="python":
        menu1.add_command(label=item,command=PY)
    elif item == "quit":
        #添加分隔线
        menu1.add_separator()
        menu1.add_command(label=item,command=win.quit)
    else:
        menu1.add_command(label=item)

#向菜单条上添加菜单选项
menubar.add_cascade(label="语言",menu=menu1)


menu2 = tkinter.Menu(menubar,tearoff=False)
menu2.add_command(label="red")
menu2.add_command(label="blue")
menubar.add_cascade(label="颜色",menu=menu2)
#进入消息循环
win.mainloop()

鼠标右键菜单

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

'''
鼠标右键,出现菜单
'''
#菜单条
menubar= tkinter.Menu(win)

#菜单
menu = tkinter.Menu(menubar,tearoff=False)
for item in ["python","c","c++","java","JS","PHP","node.js","quit"]:
    menu.add_command(label=item)

menubar.add_cascade(label="语言",menu=menu)

def showMenu(event):
    menubar.post(event.x_root,event.y_root)

win.bind("<Button-3>",showMenu)


#进入消息循环
win.mainloop()

combo_box(下拉列表框)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


#引入一个库
from tkinter import ttk

#绑定变量
cv = tkinter.StringVar()
com= ttk.Combobox(win,textvariable=cv)
com.pack()
#设置下拉数据
com["value"] = ("黑龙江","吉林","辽宁")

#设置默认值
com.current(2)      #数字代表“value”第几个值

#绑定事件
def func(event):
    print(com.get())
    print(cv.get())
com.bind("<<ComboboxSelected>>",func)       #当改变下拉框中的数据,调用函数func

#进入消息循环
win.mainloop()

frame(框架)

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


'''
框架控件
想在屏幕上显示一个矩形区域,多作为容器控件
'''
frame = tkinter.Frame(win)      #创建一个矩形区域frame
frame.pack()

#left
frame_1 = tkinter.Frame(frame)      #再在frame中创建一个矩形区域frame_1
tkinter.Label(frame_1,text="左上",bg="pink",font="黑体").pack(side=tkinter.TOP)
tkinter.Label(frame_1,text="左下",bg="yellow",font="黑体").pack(side=tkinter.TOP)
frame_1.pack(side=tkinter.LEFT)

#Rigth
frame_2 = tkinter.Frame(frame)      #在frame中创建一个矩形区域frame_2
tkinter.Label(frame_2,text="右上",bg="red",font="黑体").pack(side=tkinter.TOP)
tkinter.Label(frame_2,text="右下",bg="blue",font="黑体").pack(side=tkinter.TOP)
frame_2.pack(side=tkinter.RIGHT)

#进入消息循环
win.mainloop()

表格数据

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('600x400+200+30')

from tkinter import ttk

#表格
tree = ttk.Treeview(win)
tree.pack()
#定义列
tree["columns"] = ("姓名","年龄","身高","体重")
#设置列,列还不显示
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")

#添加数据
tree.insert("",0,text="linel",values=("fang","18","165","80"))
tree.insert("",1,text="linel",values=("zou","19","178","63"))


#进入消息循环
win.mainloop()

绝对布局

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


label1 = tkinter.Label(win,text="good",bg="red")
label2 = tkinter.Label(win,text="cool",bg="blue")

#绝对布局 ,窗口的变化对位置没有影响
label1.place(x=100,y=20)
label2.place(x=200,y=200)


#进入消息循环
win.mainloop()

树状数据

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

from tkinter import ttk

tree = ttk.Treeview(win)
tree.pack()

#添加一级树枝
treeF1 = tree.insert("",0,"中国",text="china",values=("F"))
treeF2 = tree.insert("",1,"美国",text="USA",values=("A"))
treeF3 = tree.insert("",2,"英国",text="UK",values=("N"))


#添加二级树枝
treeF1_1 = tree.insert(treeF1,0,"jiangxi",text="jiangxi",values=("F1_1"))
treeF1_2 = tree.insert(treeF1,1,"Beijing",text="Beijing",values=("F1_2"))
treeF1_3 = tree.insert(treeF1,2,"shanghai",text="shanghai",values=("F1_3"))

treeF2_1 = tree.insert(treeF2,0,"纽约",text="纽约",values=("F1_1"))
treeF2_2 = tree.insert(treeF2,1,"华盛顿",text="华盛顿",values=("F1_2"))
treeF2_3 = tree.insert(treeF2,2,"旧金山",text="旧金山",values=("F1_3"))

#添加三级树枝
treeF1_1_1 = tree.insert(treeF1_1,0,"nanchang",text="南昌",values=("F1_1_1"))


#进入消息循环
win.mainloop()

绝对布局

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


label1 = tkinter.Label(win,text="good",bg="red")
label2 = tkinter.Label(win,text="cool",bg="blue")

#绝对布局 ,窗口的变化对位置没有影响
label1.place(x=100,y=20)
label2.place(x=200,y=200)


#进入消息循环
win.mainloop()

相对布局

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


label1 = tkinter.Label(win,text="good",bg="red")
label2 = tkinter.Label(win,text="cool",bg="blue")


#相对布局,窗口改变对控件有影响
label1.pack(fill=tkinter.Y,side=tkinter.LEFT)
label2.pack(fill=tkinter.X,side=tkinter.TOP)



#进入消息循环
win.mainloop()

表格布局

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

label1 = tkinter.Label(win,text="good",bg="red")
label2 = tkinter.Label(win,text="cool",bg="blue")
label3 = tkinter.Label(win,text="nice",bg="pink")
label4 = tkinter.Label(win,text="handsome",bg="yellow")

#表格布局
label1.grid(row=0,column=0)
label2.grid(row=0,column=1)
label3.grid(row=1,column=0)
label4.grid(row=1,column=1)


#进入消息循环
win.mainloop()

鼠标点击事件

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

#<Button-1>:鼠标左键
#<Button-2>:鼠标中键(滚轮)
#<Button-3>:鼠标右键

#<Double-Button-1>:鼠标左键双击
#<Double-Button-3>:鼠标中键双击
#<Double-Button-2>:鼠标右键双击

#<Triple-Button-1>:鼠标左键三击
#<Triple-Button-2>:鼠标滚轮三击
#<Triple-Button-3>:鼠标右键三击
def func1(event):
    print(event.x,event.y)
button1 = tkinter.Button(win,text="leftmouse button")
button1.bind("<Double-Button-1>",func1)
button1.pack()


#进入消息循环
win.mainloop()

鼠标移动事件

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


#<B1-Motion>:左键移动
#<B2-Motion>:滚轮移动
#<B3-Motion>:右键移动
def func(event):
    print(event.x,event.y)
label = tkinter.Label(win,text="aaaaaaaa")
label.pack()
label.bind("<B2-Motion>",func)


#进入消息循环
win.mainloop()

鼠标释放事件

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')

#<ButtonRelease-1>:释放鼠标左键
#<ButtonRelease-2>:释放鼠标滚轮
#<ButtonRelease-3>:释放鼠标右键
def func(event):
    print(event.x,event.y)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
label.pack()
label.bind("<ButtonRelease-1>",func)


#进入消息循环
win.mainloop()

进入事件

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')



#<Enter>:鼠标光标进入控件是时触发
#<Leave>:鼠标光标离开控件是时触发
def func(event):
    print(event.x,event.y)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
label.pack()
label.bind("<Enter>",func)
label.bind("<Leave>",func)


#进入消息循环
win.mainloop()

组合按键事件

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


#<Control-Alt-a>
#<Control-Alt-q>
#<Control-a>
def func(event):
    print("event.char=",event.char)
    print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
#设置焦点
label.focus_set()
label.pack()
label.bind("<Control-a>",func)

#进入信息循环
win.mainloop()

相应所有按键事件

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


#<Key>:响应所有按键
def func(event):
    print("event.char=",event.char)
    print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
#设置焦点
label.focus_set()
label.pack()
label.bind("<Key>",func)


#进入消息循环
win.mainloop()

相应特殊按键事件

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


#<Shift_L>:左Shift键
#<Shift_R>:右Shift键
#<F5>:
#<Return>:回车
#<BackSpace>:退格


def func(event):
    print("event.char=",event.char)
    print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
#设置焦点
label.focus_set()
label.pack()
label.bind("<Shift_R>",func)

#进入信息循环
win.mainloop()

指定按键事件

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')



def func(event):
    print("event.char=",event.char)
    print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
#设置焦点
label.focus_set()
label.pack()

label.bind("a",func)        #指定按键

#进入信息循环
win.mainloop()

组合按键事件

import tkinter

#创建主窗口
win = tkinter.Tk()

#设置标题
win.title('fang')

#设置大小和位置
win.geometry('400x400+200+30')


#<Control-Alt-a>
#<Control-Alt-q>
#<Control-a>
def func(event):
    print("event.char=",event.char)
    print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
#设置焦点
label.focus_set()
label.pack()
label.bind("<Control-a>",func)

#进入信息循环
win.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值