目录
一、下载模块
在终端中输入如下命令
pip install TK
二、第一个GUI程序
代码演示
from tkinter import *
from tkinter import messagebox
# 根据类Tk的无参构造函数
root = Tk()
# 设置窗口标题
root.title('我的第一个GUI程序')
# 设置窗口的大小和位置
root.geometry('300x200+100+200')
# 在主窗口中添加可视化组件,比如按钮(Button)
btn01 = Button(root,text='点我送花')
# 通过几何布局管理显示,管理组件的大小和位置
btn01.pack()
# 事件处理,通过绑定时间处理程序,响应用户操作所出发的事件(比如:单击、双击等)
def songhua(e): # e就是事件
messagebox.showinfo('阿峰', '送你一朵小红花')
btn01.bind('<Button-1>', songhua)
# 调用组建的mainloop()方法,进入事件循环
root.mainloop()
运行结果
geometry说明
主窗口的位置大小
通过geometry('wxh(+-)x(+-)y')进行设置,w为宽度,h为高度。
+x表示距屏幕左边的距离;-x表示距屏幕右边的距离
+y表示距屏幕上边的距离;-y表示距屏幕下边的距离
三、Frame框架的使用
Frame框架是一个tkinter组件,表示一个矩形区域,Frame一般作为容器使用,可以放置其它组件,从而实现复杂的布局。
代码演示
'''测试一个经典的GUI程序的写法,使用面向对象的方式'''
from tkinter import *
from tkinter import messagebox
import tkinter as tk
class Application(tk.Frame):
'''一个经典的GUI程序的类的写法'''
def __init__(self, master=None):
# Application继承Frame,但是不能自动调用Frame中的构造函数,以下为手动调用Frame中的构造函数
tk.Frame.__init__(self, master)
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
'''创建组件'''
# command点击按钮后执行的命令
self.btn01 = Button(self, text='点击有惊喜', command=self.songhua)
self.btn01.pack()
# 设置退出按钮,command=root.destroy退出整个程序
self.btn02 = Button(self, text='退出', command=root.destroy)
self.btn02.pack()
def songhua(self):
messagebox.showinfo('送花', '送你一朵小红花')
if __name__ == '__main__':
root = Tk()
root.geometry('400x100+200+300')
root.title('一个经典的GUI程序类的测试')
app = Application(master=root)
root.mainloop()
运行结果
四、Label标签
Label(标签)主要用于显示文本信息,也可以显示图像
Label标签的常用属性
1、width、height
用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字占两个字符位置);如果显示是图像,则以像素为单位。默认值是根据具体的内容动态调整。
2、font
指定字体样式和字体大小,如:font=(font_name, size)
3、image
显示在Label上的图像,目前tkinter只支持gif格式
4、bg、fg
fg(foreground):前景色;bg(background):背景色
5、justify
针对多行文字的对齐,可设置justify属性,可选值:“left”,“center”,“right”
代码演示
import tkinter as tk
from tkinter import *
from PIL import ImageTk, Image
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self,master)
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
'''创建组件'''
self.label01 = Label(self, text='第一个Label', width=11, height=2,
fg='white', bg='black')
self.label02 = Label(self, text='第二个Label', width=11, height=2,
fg='blue', bg='white', font=('黑体',12))
self.label01.pack()
self.label02.pack()
# 显示图像
# 把photo声明成全局变量,如果是局部变量,本方法执行完毕后,图像对象销毁,窗口显示不出图像
global img
photo = Image.open("2.jpg") # 括号里为需要显示在图形化界面里的图片
photo = photo.resize((200, 100)) # 规定图片大小
img = ImageTk.PhotoImage(photo)
self.label03 = Label(self,image=img)
self.label03.pack()
self.label04 = Label(self, text='如果\n云\n知道',borderwidth=1, relief='groove', justify='right',
fg='white', bg='black',font=('黑体',12))
self.label04.pack()
# 设置退出按钮
self.btn01 = Button(self, text='退出', command=root.destroy)
self.btn01.pack()
if __name__ == '__main__':
root = Tk()
root.title('Label测试')
root.geometry('300x300+200+300')
app = Application(master=root)
root.mainloop()
运行结果