蟒蛇-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(列表框)

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()

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()

import tkinter

#创建主窗口

win = tkinter.Tk()

#设置标题

win.title('fang')

#设置大小和位置

#win.geometry('400x400+200+30')

#EXTENDED 可以使listbox支持shiftcontrol

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()

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=10increment=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

#创建Axitrader返佣

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.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()

原文链接:https://blog.csdn.net/fangweijiex/article/details/103690050

猜你喜欢

转载自www.cnblogs.com/benming/p/12101674.html