tkinter是Python自带的GUI库,可以实现GUI编程,将脚本或者代码封装成一个GUI或者EXE可执行文件,方便日后使用。这部分总结一下最近几天学习的tkinter库的使用,后面会基于该库做一些简单的小工具和小游戏,以练习tkinter的使用。
首先tkinter.Button这种形式可以这样理解:tkinter是对应的库民,Button是一个作为按钮的Object,首字母需要大写。tkinter还有其他的常用object,比如生成GUI首先需要生成一个主窗口对象,因此需要用到tkinter.Tk(),作为标签的tkinter.Label,可以设置菜单的tkinter.Menu,设置输入框的tkinter.Entry,设置单选按钮的tkinter.Radiobutton和复选按钮的tkinter.Checkbutton,绘图时设置画布的tkinter.Canvas……因此掌握这些object可以实现比较常见的GUI元素,是必须掌握的基础。
下面是一个tkinter.Button的实例。
import tkinter #导入tkinter模块
root=tkinter.Tk() #生成一个主窗口对象
button1=tkinter.Button(root,anchor=tkinter.E,text="按钮1",width=30,height=7)
button1.pack()
button2=tkinter.Button(root,text="按钮2",bg='blue')
button2.pack()
button3=tkinter.Button(root,text="button3",width=12,height=1)
button3.pack()
button4=tkinter.Button(root,text="button4",width=40,height=7,state=tkinter.DISABLED)
button4.pack()
root.mainloop()
显示效果:
作为第一个基本实例,有必要搞清楚每一行代码表示的含义。
首先import tkinter是导入一个库,如果该库是标准库,则不需要再行下载;如果该库是第三方库,则需要提前下载安装。
root=tkinter.Tk()是使用Tk()这个object生成一个主窗口对象,并命名为root。我们的所有button,menu,entry都需要放置在root里面,它相当于是一个容器,里面可以有我们种的花花草草和养的飞禽走兽,这花花草草就是静态的object,飞禽走兽就是我们需要链接的动作或者说事件。容器的概念可以类比C++的STL。实际上,我们也可以开多个主窗口,但是要注意都需要进入mainloop()。如下面的代码可以开两个主窗口。
import tkinter
root=tkinter.Tk()
root.title('QJX')
window=tkinter.Tk()
window.title('WYF')
root.mainloop()
window.mainloop()
button1和后面的button2,button3都是一样的,搞清楚一个就可以。很显然button1是一个tkinter.Button的object,括号里面是对应的属性设置。凡是object,都需要指定是以哪个主窗口为master的,虽然实践证明当只有一个master时,即只有一个主窗口时,不指定master也是可以的,但这种方法不推荐。这里所有的button显然都指定root为主窗口。anchor=tkinter.E是指定button中文本的对齐方式,这里是右对齐,为什么是右对齐呢,是因为E(eastern)是东的方向,GUI默认是上北下南左西右东,因此东在右侧,故是右对齐。其他对齐方式还有E,S,W,N,NE(东北),NW(西北),SW(西南),SE(东南)。button4的state=tkinter.DISABLED是设置按钮为不使能,即为灰色无法选中的状态。每一个button后面的pack()是将其放在master中,还有一种方法是place()
import tkinter
root=tkinter.Tk() #生成一个主窗口对象
canvas=tkinter.Canvas(root,width=600,height=480,bg='white')
canvas.create_text(301,76,text='use canvas',fill='gray')
canvas.create_text(300,75,text='use canvas',fill='blue')
canvas.create_polygon(290,114,316,114,330,130,310,146,284,146,270,130) #绘制多边形
canvas.create_oval(280,120,320,140,fill='white') #绘制椭圆
canvas.create_line(250,130,350,130)
canvas.create_line(300,100,300,160)
canvas.create_rectangle(90,190,510,410,width=5)
canvas.create_arc(100,200,500,400,start=0,extent=240,fill='pink')
canvas.create_arc(103,203,500,400,start=241,extent=118,fill='red')
canvas.pack()
root.mainloop()
import tkinter
root=tkinter.Tk()
label1=tkinter.Label(root,bg='red',fg='blue',text='Python',width=40,height=5)
label1.pack()
label2=tkinter.Label(root,text='Pythhhhon\ntkinter',justify=tkinter.LEFT,width=40,height=5)
label2.pack()
label3=tkinter.Label(root,text='Pythhhhon\ntkinter',justify=tkinter.RIGHT,width=40,height=5)
label3.pack()
label4=tkinter.Label(root,text='Pythhhhon\ntkinter',justify=tkinter.CENTER,width=40,height=5)
label4.pack()
root.mainloop()
import tkinter
root=tkinter.Tk()
menu=tkinter.Menu(root)
submenu=tkinter.Menu(menu,tearoff=0)
submenu.add_command(label="新建")
submenu.add_command(label="打开")
submenu.add_command(label="保存")
submenu.add_command(label="关闭")
menu.add_cascade(label="文件",menu=submenu)
submenu=tkinter.Menu(menu,tearoff=1)
submenu.add_command(label="复制")
submenu.add_command(label="粘贴")
submenu.add_separator()
submenu.add_command(label="剪切")
menu.add_cascade(label="编辑",menu=submenu)
submenu=tkinter.Menu(menu,tearoff=0)
submenu.add_command(label="关于")
menu.add_cascade(label="帮助",menu=submenu)
root.config(menu=menu)
root.mainloop()
import tkinter
root=tkinter.Tk() #生成一个主窗口对象
r=tkinter.StringVar() #生成字符串常量
r.set('1')
radio=tkinter.Radiobutton(root,variable=r,value='1',text='单选按钮1')
radio.pack()
radio=tkinter.Radiobutton(root,variable=r,value='2',text='单选按钮2')
radio.pack()
radio=tkinter.Radiobutton(root,variable=r,value='3',text='单选按钮3')
radio.pack()
radio=tkinter.Radiobutton(root,variable=r,value='4',text='单选按钮4')
radio.pack()
c=tkinter.IntVar()
c.set(1)
check=tkinter.Checkbutton(root,text='复选按钮',variable=c,onvalue=1,offvalue=2)
check.pack()
root.mainloop()
print(r.get())
print(c.get())
import tkinter
root=tkinter.Tk()
entry1=tkinter.Entry(root,show='*')
entry1.pack()
entry2=tkinter.Entry(root,show='#',width=50)
entry2.pack()
entry3=tkinter.Entry(root,bg='red',fg='blue')
entry3.pack()
entry4=tkinter.Entry(root,selectbackground='red',selectforeground='gray')
entry4.pack()
edit1=tkinter.Text(root,selectbackground='red',selectforeground='gray')
edit1.pack()
root.mainloop()
import tkinter
import tkinter.messagebox
def cmd():
global n
global buttontext
n+=1
if n==1:
tkinter.messagebox.askokcancel('Python tkinter','取消')
buttontext.set('浪潮软件')
elif n==2:
tkinter.messagebox.askquestion('Python tkinter','浪潮软件')
buttontext.set('AAAA')
elif n==3:
tkinter.messagebox.askyesno('Python tkinter','否')
buttontext.set('showerror')
elif n==4:
tkinter.messagebox.showerror('Python tkinter','错误')
buttontext.set('showinfo')
elif n==5:
tkinter.messagebox.showinfo('Python tkinter','详情')
buttontext.set('显示警告')
else:
n=0
tkinter.messagebox.showwarning('Python tkinter','警告')
buttontext.set('AAAAl')
n=0
root=tkinter.Tk()
buttontext=tkinter.StringVar()
buttontext.set('AAAAl')
button=tkinter.Button(root,textvariable=buttontext,command=cmd)
button.pack()
root.mainloop()
import tkinter
import tkinter.simpledialog
def InStr():
r=tkinter.simpledialog.askstring('Python','字符串',initialvalue='string')
print(r)
def InInt():
r=tkinter.simpledialog.askinteger('Python','输入整数',initialvalue='10')
print(r)
def InFlo():
r=tkinter.simpledialog.askfloat('Python','输入浮点数',initialvalue='1.2')
print(r)
root=tkinter.Tk()
button1=tkinter.Button(root,text='输入字符串',command=InStr)
button1.pack(side='left')
button2=tkinter.Button(root,text='输入整数',command=InInt)
button2.pack(side='left')
button3=tkinter.Button(root,text='输入浮点数',command=InFlo)
button3.pack(side='left')
root.mainloop()
这里需要引入tkinter.simpledialog这个模块,然后可以通过button的command调用相关函数。
import tkinter
import tkinter.filedialog
def FileOpen():
r=tkinter.filedialog.askopenfilename(title='Python',filetypes=[('Python','*.py;*.pyw'),('All files','*')])
print(r)
def FileSave():
r=tkinter.filedialog.asksaveasfilename(title='Python',initialdir=r'D:\Python_QJX',initialfile='test.py')
print(r)
root=tkinter.Tk()
button1=tkinter.Button(root,text='打开文件',command=FileOpen)
button1.pack(side='left')
button2=tkinter.Button(root,text='保存文件',command=FileSave)
button2.pack(side='left')
root.mainloop()