Python-tkinter库的学习实例

文章目录

tkinter介绍

tkinter是Python自带的GUI库,可以实现GUI编程,将脚本或者代码封装成一个GUI或者EXE可执行文件,方便日后使用。这部分总结一下最近几天学习的tkinter库的使用,后面会基于该库做一些简单的小工具和小游戏,以练习tkinter的使用。

tkinter.Button实例

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

显示效果:
Python-tkinter库的学习实例
作为第一个基本实例,有必要搞清楚每一行代码表示的含义。
首先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()

Python-tkinter库的学习实例
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()

tkinter.Canvas实例

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

tkinter.Label实例

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

tkinter.Menu实例

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

tkinter.Radiobutton和tkinter.Checkbutton实例

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

tkinter.Entry()实例

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

tkinter.messagebox库的实例

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

tkinter.simpledialog库的实例

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调用相关函数。

tkinter.filedialog库的实例

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()
上一篇:python3 struct模块


下一篇:66-使用偏函数实现简单的图形界面窗口