python图形化界面
- 导论
- 为窗口命名(root.wm_title(""))
- label类(仅用来显示信息)
- 仅有一个标签
- 多标签
- 按钮
- command绑定事件
- bind绑定事件
- 为button设置属性
- pack的布局
- grid布局
- 事件及其绑定
- bind函数中的事件类型
- 解绑
- 输入框
- 菜单
- 子菜单
- 分界线
- 单选按钮(radiobutton)与多选按钮(checkbutton)
- 对话框
- 消息框
- 复选按钮
- 文本域
- 窗口
- toplevel窗口
- 窗口重绘
- 自绘象棋盘
- 持续更新中~~~~~~~~
导论
1:首先导入包from tkinter import *
2:然后创建一个对象 root=Tk()
3:写完程序后记得root.mainloop()
看下面测试代码
from tkinter import *
root=Tk()
root.mainloop()
为窗口命名(root.wm_title(“”))
from tkinter import *
root=Tk()
root.wm_title("这是我的第一个tkinter窗口")
root.mainloop()
label类(仅用来显示信息)
仅有一个标签
from tkinter import *
root=Tk()
root.wm_title("这是我的第一个tkinter窗口")
wl=Label(root,text="欢迎来到图书馆",background='red')#text表示文本内容,root表示显示的窗口,background是底色
wl.pack()
root.mainloop()
多标签
from tkinter import *
root=Tk()
root.wm_title("这是我的第一个tkinter窗口")
w1=Label(root,text="欢迎来到图书馆",background='red')#text表示文本内容,root表示显示的窗口
w2=Label(root,text="欢迎来到图书馆",background='green')#text表示文本内容,root表示显示的窗口
w3=Label(root,text="欢迎来到图书馆",background='blue')#text表示文本内容,root表示显示的窗口
w1.pack()
w2.pack()
w3.pack()
root.mainloop()
注:这里的pack是将标签处于一个默认的位置
按钮
按钮可以执行相应的功能可以理解为一个函数,点击按钮执行相应的函数功能
command绑定事件
from tkinter import *
def myLabel():
global i,root
s=Label(root,text='我爱python%d次'%i)#显示在root窗口
s.pack()
i+=1
root=Tk()
i=1
b=Button(root,text='python',command=myLabel)#text是按钮的名
b.pack()
root.mainloop()
以下是点击5次的结果:
bind绑定事件
from tkinter import *
def myLabel(event):#加了一个参数来接受事件
global i,root
s=Label(root,text='我爱python%d次'%i)
s.pack()
i+=1
root=Tk()
i=1
b=Button(root,text='python')#没有了command
b.bind("<Button-1>",myLabel)#这里Button-1是鼠标左键触发的意思,下面会详细讲
b.pack()
root.mainloop()
为button设置属性
pack的布局
1.使用pack函数的时候,默认先使用的放到最上面,然后依次向下排
2.pack函数也可以接受几个参数
(1)side指定了停在哪个方向,可以是TOP,BOTTOM,LEFT,RIGHT,分别表示上下左右
(2)fill参数可以是X,Y,BOTH,NULL,即在水平方向填充,竖直方向填充,双向均填充和不填充
(3)expand可以是YES和NO,它的anchor参数可以是N,E,S,W(分别表示北东南西,对标为上右下左),以及他们的组合或CENTER表示中间
(4)ipadx表示的是内边距的x方向,ipady表示的是内边距的y方向,padx表示的是外边距的x方向,pady表示的外边距的y方向
(pack的布局感觉还是比较复杂,所以还是较常用grid)
from tkinter import *
root=Tk()
Button(root,text='A').pack(side=LEFT,expand=YES,fill=Y)
Button(root,text='B').pack(side=TOP,expand=YES,fill=BOTH,anchor=NE)
root.mainloop()
grid布局
有3个参数,row表示行,column表示列,还有个sticky参数,可以是N,S,W,E分别表示上下左右
from tkinter import *
root=Tk()
Label(root,text='账号:').grid(row=0,sticky=W)
Entry(root).grid(row=0,column=1,sticky=E)
Label(root,text='密码:').grid(row=1,sticky=W)
Entry(root).grid(row=1,column=1,sticky=E)
Button(root,text="登录").grid(row=2,column=1,sticky=N)
root.mainloop()
注:pack和grid不能同时用
事件及其绑定
bind函数中的事件类型
< Button-1 > 鼠标左击触发事件,3:鼠标右击,2:鼠标中键
还有其他的键出发,主要用鼠标,这里不再介绍,有兴趣可以查一下
解绑
用函数unbind()
输入框
Entry()
(1)get函数,不需要任何参数,返回的内容是输入框的内容
(2)e是一个文本框,可以操作e[‘show’]='*'之后就成为了一个密码框
import pymysql
from tkinter import *
root=Tk()
Label(root,text="账号").grid(row=0,column=0,sticky=W)#创建一个标签
a_txt=Entry(root)#创建一个文本
a_txt.grid(row=0,column=3,sticky=W)#将文本放入正确的位置
Label(root,text="密码").grid(row=1,column=0,sticky=W)#创建一个标签
b_txt=Entry(root)
b_txt.grid(row=1,column=3,sticky=W)#再创建一个文本
b_txt['show']='*'
root.mainloop()
菜单
1.Menu新建菜单
2.add_command添加菜单项
3.add_command中参数有label(菜单项名称),command(指定点击是否调用方法),acceletor指定的是快捷键,underline属性是否有下划线
4.可以指定使用哪一个作为顶层菜单
import pymysql
from tkinter import *
root=Tk()
menubar=Menu(root)
for item in ["文件","编辑","视图","关于"]:
menubar.add_command(label=item)
root['menu']=menubar
root.mainloop()
子菜单
有子菜单的情况用add_cascade,其有两个属性,menu:级联到哪个菜单项上,label:该菜单项的名
import pymysql
from tkinter import *
root=Tk()
menubar=Menu(root)
Fmenu=Menu(menubar)
Emenu=Menu(menubar)
for item in ["word文件","压缩文件","ppt文件","c++文件","python文件"]:
Fmenu.add_command(label=item)
for item in ["删除","赋值","增加"]:
Emenu.add_command(label=item)
menubar.add_cascade(label="文件",menu=Fmenu)
menubar.add_cascade(label="操作",menu=Emenu)
root['menu']=menubar
root.mainloop()
注:应先建立好子菜单,再建立上层菜单
分界线
from tkinter import *
def myLabel():
global root
Label(root,text="我的程序语言课程").pack()
root=Tk()
menuBar=Menu(root)
sonMenu=Menu(menuBar)
for each in ['C++','python','java','javaEE','IOS']:
sonMenu.add_command(label=each)
sonMenu.add_separator()#插入分割线
for each in ['PHP','UI设计','前端']:
sonMenu.add_command(label=each)
menuBar.add_cascade(label='程序设计',menu=sonMenu)
root['menu']=menuBar
root.mainloop()
单选按钮(radiobutton)与多选按钮(checkbutton)
from tkinter import *
def myLabel():
global root
Label(root,text="我的程序语言课程").pack()
root=Tk()
menuBar=Menu(root)
sonMenu=Menu(menuBar)
for each in ['C++','python','java','javaEE','IOS']:
sonMenu.add_radiobutton(label=each)#单选
sonMenu.add_separator()#插入分割线
for each in ['PHP','UI设计','前端']:
sonMenu.add_checkbutton(label=each)#多选
menuBar.add_cascade(label='程序设计',menu=sonMenu)
root['menu']=menuBar
root.mainloop()
对话框
from tkinter.dialog import *
from tkinter import *
root=Tk()
def myDialog():
d=Dialog(None,title="python调查",text="喜欢python吗?",bitmap="info",default=0,strings=("喜欢","很喜欢","非常喜欢"))#对话窗口
print(d.num)
btn_begin=Button(None,text="Python调查",command=myDialog)#实行按钮
btn_begin.pack()
btn_quit=Button(None,text="关闭",command=btn_begin.quit)#关闭按钮
btn_quit.pack()
btn_begin.mainloop()
消息框
from tkinter.dialog import *
from tkinter.messagebox import *
from tkinter import *
showinfo(title="python学堂",message="好好学python")
复选按钮
复选框通常是⽤来选择信息的时候的⼀种选择,它前⾯ 有个⼩正⽅形的⽅块,如果
选中则有⼀个对号,也可以再 次点击以取消该对号来取消选中
from tkinter.dialog import *
from tkinter.messagebox import *
from tkinter import *
timeA=0
timeB=0
def funA():
global lab1,btnA,timeA
if timeA%2==0:
timeA+=1
lab1['text']="python学科被选中"
else:
timeA+=1
lab1['text']='python学科被取消'
def funB():
global lab2, btnB, timeB
if timeB % 2 == 0:
timeB += 1
lab2['text'] = "java学科被选中"
else:
timeB += 1
lab2['text'] = 'java学科被取消'
root=Tk()
btnA=Checkbutton(root,text='python学科',command=funA)
btnA.pack()
btnB=Checkbutton(root,text='java学科',command=funB)
btnB.pack()
lab1=Label(root,text=" ")
lab1.pack()
lab2=Label(root,text=" ")
lab2.pack()
root.mainloop()
from tkinter import *
root=Tk()
btnA=Radiobutton(root,text='python学科',value='python')
btnA.pack()
btnB=Radiobutton(root,text='java学科',value='java')
btnB.pack()
root.mainloop()
文本域
from tkinter import *
root = Tk()
t = Text(root, width = 50, height = 30)
t.pack()
root.mainloop()
窗口
toplevel窗口
from tkinter.dialog import *
from tkinter.messagebox import *
from tkinter import *
from tkinter import *
root = Tk()
root.title("我是root窗⼝")
lr = Label(root, text = "我属于root")
lr.pack()
top = Toplevel(root, width = 30, height = 20)
top.title("我是toplevel窗⼝")
lt = Label(top, text = "我属于toplevel")
lt.pack()
root.mainloop()
窗口重绘
from tkinter import *
root = Tk()
root.title("随便绘制⼀下下")
canv = Canvas(root, width = 400, height = 300, bg = "white")
canv.create_line((0,0), (200,200), width = 8)
canv.create_text(300, 30, text = "Python学院")
canv.pack()
root.mainloop()
自绘象棋盘
from tkinter import *
root = Tk()
root.title("中国象棋棋盘⼿绘")
canv = Canvas(root, width = 400, height = 450)
canv.create_line((0,2), (400,2), width = 2)
for i in range(10):
canv.create_line((0, i * 50), (400, i * 50), width = 2)
canv.create_line((3,0), (3,450), width = 2)
for i in range(8):
canv.create_line((i * 50,0), (i * 50,200), width = 2)
for i in range(8):
canv.create_line((i * 50,250), (i * 50,450), width = 2)
canv.create_line((397,0), (397,450), width = 2)
canv.create_line((150,0), (250,100), width = 2)
canv.create_line((150,100), (250,0), width = 2)
canv.create_line((150,450), (250,350), width = 2)
canv.create_line((150,350), (250,450), width = 2)
canv.create_text(110, 220, text = "汉界")
canv.create_text(290, 220, text = "楚河")
canv.pack()
root.mainloop()