程序的基本结构
输入—控制—输出
GUI图形用户接口
Graphical User Interface
1、Python常用的GUI框架
Tkinter 内置模块
PyQt
wxPython
Kivy
Flexx
pywin32
pyui4win
2、创建窗口
先创建一个空窗口
from tkinter import * # 先引入
root = Tk() # 创建窗口
root.mainloop() # 主线程的一个循环,让操作系统知道这窗口不是马上就消失,而是要一直监听用户的输入
创建窗体
from tkinter import * # 先引入
root = Tk() # 创建窗口
root.title("个人所得说计算器 v1.0") # 指定标题
root.geometry("400x200+400+300") # 指定宽高,单位是像素;左侧和顶端的偏移量
root.mainloop() # 主线程的一个循环,让操作系统知道这窗口不是马上就消失,而是要一直监听用户的输入
加入标签 Label
# 标签 label
from tkinter import * # 先引入
root = Tk() # 创建窗口
root.title("个人所得说计算器 v1.0") # 指定标题
root.geometry("400x200+400+300") # 指定宽高,单位是像素;左侧和顶端的偏移量
inputLabel = Label(root, text='人生苦短,我用python', bg='lightblue', font='微软雅黑 12 normal') # 定义/实例化一个标签,Label第一个参数放在主窗口root里面
inputLabel.pack(padx=5, pady=10, fill=X) # 将标签放置在窗体上,参数表示设置间距,单位像素
inputLabel = Label(root, text='人生苦短,我用python', bg='lightyellow', font='微软雅黑 12 normal') # 定义/实例化一个标签,Label第一个参数放在主窗口root里面
inputLabel.pack(padx=5, pady=10, fill=BOTH, expand=True) # 动态的变化
root.mainloop() # 主线程的一个循环,让操作系统知道这窗口不是马上就消失,而是要一直监听用户的输入
输入块
from tkinter import * # 先引入
from ch12.person_tax_calc import calc
def tax_calc():
inputCount = inputVar.get()
tax = calc(int(inputCount))
outputVar.set("所得税:%.2f 元" % tax)
root = Tk() # 创建窗口
root.title("个人所得说计算器 v1.0") # 指定标题
root.geometry("400x200+400+300") # 指定宽高,单位是像素;左侧和顶端的偏移量
topFrame = Frame(root) # 容器将下面三个模块封装到一起
inputLabel = Label(topFrame, text='请输入月收入:') # 定义/实例化一个标签,Label第一个参数放在容器topFrame里面
inputLabel.pack(side=LEFT,padx=5, pady=5) # 将标签放置在窗体上,参数表示设置间距,单位像素
inputVar = StringVar() # 字符串类型的变量
inputEntry = Entry(topFrame, textvariable=inputVar) # 单行文本输入块,参数是获取输入值
inputEntry.pack(side=LEFT)
inputButton = Button(topFrame, text='计算', command=tax_calc) # 按钮,里面参数让按钮动起来
inputButton.pack(side=LEFT,padx=5, pady=5) # 按钮间距
topFrame.pack(padx=5, pady=5) # 容器封装
outputVar = StringVar()
outputVar.set('点击计算')
outputLabel = Label(root, textvariable=outputVar, font='微软雅黑 24 normal', fg='green')
outputLabel.pack(padx=5, pady=5)
root.mainloop() # 主线程的一个循环,让操作系统知道这窗口不是马上就消失,而是要一直监听用户的输入
布局相关的方法此处用了pack(),除此之外还有grid() place()
例如:简单模拟一个登陆页面
from tkinter import * # 先引入
from tkinter import messagebox
def login(): # 定义登陆函数
username = userVar.get()
password = passVar.get()
print(username, password)
if username == '' or password == '':
messagebox.showinfo('错误', '用户名和密码不能为空。')
elif username == 'sniper' and password == '123456':
messagebox.showinfo('信息', '登陆成功')
else:
messagebox.showinfo('错误', '用户名和密码不匹配')
root = Tk() # 创建窗口
root.title("模拟登录") # 指定标题
root.geometry("400x200+400+300") # 指定宽高,单位是像素;左侧和顶端的偏移量
Label(root, text='请输入用户名和密码:').pack(pady=30)
userFrame = Frame(root)
Label(userFrame, text='用户名:').pack(side=LEFT, padx=5, pady=5)
userVar = StringVar()
Entry(userFrame, textvariable=userVar).pack(side=LEFT, padx=5, pady=5)
userFrame.pack()
passFrame = Frame(root)
Label(passFrame, text='密 码:').pack(side=LEFT, padx=5, pady=5)
passVar = StringVar()
Entry(passFrame, textvariable=passVar, show='*').pack(side=LEFT, padx=5, pady=5) # 密码非明文显示
passFrame.pack()
buttonFrame = Frame(root)
Button(buttonFrame, text='登录', command=login).pack(side=LEFT, padx=5, pady=5)
Button(buttonFrame, text='取消', command=root.destroy).pack(side=LEFT, padx=5, pady=5) # root窗口被销毁
buttonFrame.pack()
root.mainloop() # 主线程的一个循环,让操作系统知道这窗口不是马上就消失,而是要一直监听用户的输入