Python中基于tkinter的GUI编程的基本概念与实例
一、 tkinter的基本概念
tkinter是python中自带的用于GUI编程的模块,tkinter是对图形库TK的封装,tkinter是跨平台的,既在linux下编写的程序可以不加修改地在windows下运行,它的优势在于可移植性。
使用tkinter可以创建完整的GUI程序,在tkinter中可以直接使用文本框、按钮、标签等组件进行GUI编程,换句话说,要实现某个界面元素,只要调用对应的组件即可。tkinter是python中的一个模块,可以像其他模块在python的交互式shell中被导入tkinter模块被导入即可使用tkinter中的模块方法等。
下文将使用pycharm演示最基础的九个GU程序代码,并在代码中附有注释,常用的组件和方法本文都有涉及。
二、实例
1,创建一个最简单的带标签和按钮的窗口。代码如下
import tkinter #导入tkinter模块 root = tkinter.Tk() #生成root主窗口 lable = tkinter.Label(root,text="hello,tkinter!") #生成标签 lable.pack() #将标签添加到root主窗口 button1 = tkinter.Button(root,text="Button1") #生成标签 button1.pack(side=tkinter.LEFT) #将标签添加到root主窗口,并放在左边 button2 = tkinter.Button(root,text="Button2") #生成标签 button2.pack(side=tkinter.RIGHT) #将标签添加到root主窗口,并放在左边 root.mainloop() #进入消息循环
运行结果如下:
2,在主窗口中创建各种不同的按钮,代码如下:
import tkinter root = tkinter.Tk() button1 = tkinter.Button(root, anchor = tkinter.E, #制定文本的对齐方式 text = 'Button1', width = 40, height = 5) button1.pack() button2 = tkinter.Button(root, text = 'Button2', bg = 'blue') button2.pack() button3 = tkinter.Button(root, text='Button3', width = 14, height = 1) button3.pack() button4 = tkinter.Button(root, text='Button4', width = 60, height=5, state = tkinter.DISABLED) #指定按钮为禁用模式 button4.pack() root.mainloop()
运行结果如下:
3,创建不同类型的文本框
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() entry5 = tkinter.Entry(root, state=tkinter.DISABLED) #文本框设置为禁用 entry5.pack() edit1 = tkinter.Text(root, selectbackground='red', selectforeground='gray') edit1.pack() root.mainloop()
运行结果为:
4,创建不同类型的标签组件
import tkinter root = tkinter.Tk() label1 = tkinter.Label(root, anchor = tkinter.E, bg = 'blue', fg = 'red', text = 'python', width = 30, height = 5) label1.pack() label2 = tkinter.Label(root, text = 'python GUI\ntkinter', justify = tkinter.LEFT, #设置多行文本为左对齐 width = 30, height = 5) label2.pack() label3 = tkinter.Label(root, text = 'python GUI\ntkinter', justify = tkinter.RIGHT, #设置多行文本为右对齐 width = 30, height = 5) label3.pack() label4 = tkinter.Label(root, text = 'python GUI\ntkinter', justify = tkinter.CENTER, #设置多行文本居中 width = 30, height = 5) label4.pack() root.mainloop()
运行结果如下:
5,创建添加菜单的主窗口:
import tkinter root = tkinter.Tk() menu = tkinter.Menu(root) submenu = tkinter.Menu(menu,tearoff = 0) #生成下拉菜单 submenu.add_command(label="open") #向下拉菜单中添加open命令 submenu.add_command(label="save") submenu.add_command(label="close") menu.add_cascade(label="File",menu=submenu) #将下拉菜单添加到菜单中 submenu = tkinter.Menu(menu,tearoff = 0) submenu.add_command(label="copy") submenu.add_command(label="paste") submenu.add_separator() #向下拉菜单中添加分割符 submenu.add_command(label="cut") menu.add_cascade(label="Edit",menu=submenu) #将下拉菜单添加到菜单中 submenu = tkinter.Menu(menu,tearoff=0) submenu.add_command(label="About") menu.add_cascade(label="help",menu=submenu) root.config(menu=menu) root.mainloop()
运行结果如下:点击一下Edit就会看到分割线
6,插件弹出式菜单:
import tkinter root = tkinter.Tk() menu = tkinter.Menu(root,tearoff=0) #插件菜单 menu.add_command(label="Copy") menu.add_command(label="paste") menu.add_separator() #向弹出式菜单中添加分隔符 menu.add_command(label="cut") def popupmenu(event): #定义右键事件的处理函数 menu.post(event.x_root,event.y_root) #显示菜单 root.bind("<Button-3>",popupmenu) #显示菜单 root.mainloop()
运行结果如下:右击一下就会看到效果
7,创建单选框与复选框((单选框就是一组相互排斥的选项,只能选择一项,就像选择题的ABCD选项一样),(复选框就是一个复选框组件表示两种不同状态,即选中一种状态,未选中一种状态))
import tkinter root = tkinter.Tk() r = tkinter.StringVar() #使用Steingvar生成字符串变量用于单选框组件 r.set('1') #初始化变量值 radio = tkinter.Radiobutton(root, variable = r, value = '1', text = 'Radio1') radio.pack() radio = tkinter.Radiobutton(root, variable = r, value = '2', text = 'Radio2') radio.pack() radio = tkinter.Radiobutton(root, variable = r, value = '3', text = 'Radio3') radio.pack() radio = tkinter.Radiobutton(root, variable = r, value = '4', text = 'Radio4') radio.pack() c = tkinter.IntVar() #使用IntVar生成字符串变量用于单选框组件 c.set(2) #初始化变量值 check = tkinter.Checkbutton(root, text = 'Checkbutton', variable = c, onvalue = 1, offvalue = 2) check.pack() root.mainloop() print(r.get()) print(c.get())
运行结果为:
8,创建按钮形式的单选框复选框
import tkinter root = tkinter.Tk() r = tkinter.StringVar() r.set('2') radio = tkinter.Radiobutton(root, #设置单选框组件 variable = r, #设置单选框关联的变量 value = '1', indicatoron = 0, #将单选框设置为按钮模式 text = 'Dadio1') radio.pack() radio = tkinter.Radiobutton(root, variable = r, value = '2', indicatoron = 0, #将单选框设置为按钮模式 text = 'Dadio2') radio.pack() radio = tkinter.Radiobutton(root, variable = r, value = '3', indicatoron = 0, #将单选框设置为按钮模式 text = 'Dadio3') radio.pack() radio = tkinter.Radiobutton(root, variable = r, value = '4', indicatoron = 0, #将单选框设置为按钮模式 text = 'Dadio4') radio.pack() c = tkinter.IntVar() #使用IntVar生成整型变量用于复选框 c.set(2) check = tkinter.Checkbutton(root, text = 'Checkbutton', variable = c, #设置复选框关联的变量 indicatoron = 0, #将复选框设置为按钮模式 onvalue = 1, #选中为1 offvalue = 2) #未选中为二 check.pack() root.mainloop()
运行结果为:
9,使用Canvas绘制图形:
import tkinter root = tkinter.Tk() canvas = tkinter.Canvas(root, width = 600, height = 480, bg = 'white') canvas.create_text(302,77, #使用crest_text绘制文字 text = 'use canvas', fill = 'grey') #文字颜色为灰色 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() #将Canvas添加到主窗口 root.mainloop()
运行结果为: