Python3 - 函数以及GUI_TKINTER(第四天)
Posted 韩俊强
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 - 函数以及GUI_TKINTER(第四天)相关的知识,希望对你有一定的参考价值。
文章目录
1.函数
函数 — 把一段具有独立功能的代码进行封装,便于使用这个功能的时候直接调用
例如:
# 圆的面积 --- S = π * r ** 2 需要知道r半径
# r = 3 的面积
# S = 3.14 * 3 ** 2
# print(S)
#
# r = 5 的面积
# S = 3.14 * 5 ** 2
# print(S)
1.函数分为两种:
系统函数 --- Python环境中自带的
print
input
ord
id
type
自定义函数
格式: def 函数名(形式参数1,形式参数2,形式参数3...形式参数n):
功能体
return 功能的运算结果
结果:
def --- python关键字, 用语定义函数的关键字
函数名 ---- 自定义函数名字, 必须遵守标识符规范
命名规范: 字母是小写的, 单词和单词之间使用下划线隔开
() --- 必须有
形式参数 ---- 形参, 是一个变量, 接受参与功能运算的数据的功能中未知项的个数,决定形式的个数
实际参数 ---- 实参, 调用这个功能的时候,给形参赋值的具体就是实参
return ---- 作用是结束函数,并把功能运算结果返回到调用函数的位置
如果函数中不需要调用的位置返回值, 这个retun 是可以省略的,或者还可以写成return None
# print(print('1')) # 1 None
# 圆的面积封装, 声明函数
def get_area(r):
S = 3.1415926 * r ** 2
return S
# 调用功能 函数名(实参)
num = float(get_area(5))
print(f'半径5的面积为num:.2f')
'''
明确是否有未知项参与运算 --- 决定的是形参的个数
明确是否需要把结果返回 ---- 决定return的有无
'''
# 获取两个数的最大值
def get_max_value(value1, value2):
# if value1 > value2:
# return value1
# else:
# return value2
return value1 if value1 > value2 else value2
max_value = get_max_value(12, 20)
print(max_value)
# pass掉
# res = 0 > -1 and 0 or -1
# print(res)
# 新的三元运算符 if-else组成的
# 表达式1 if 条件表达式 else 表达式2
# 判断条件表达式是否成立, 成立则表达式1, 不成立则表达式2
# res2 = 0 if 0 > -1 else -1
# print(res2)
'''
练习:
1.封装一个函数, 比较两个数的大小, 前者大于后者返回1,前者小于后者返回-1, 两者相等返回0
2.封装一个函数, 判断两个数是否相等
'''
def compare(a, b):
# if a == b:
# return 0
# else:
# return 1 if a > b else -1
return (a > b) - (a < b)
res = compare(10, 7)
print(res)
# 2.封装一个函数, 判断两个数是否相等
def is_equal(a, b):
# return True if a == b else False
return a == b # 简化
res2 = is_equal(11, 11)
print(res2)
# 函数名 === 函数本身
# 函数名() --- 调用函数 --- 函数的运行结果
# 函数也是一种类型的数据
print(type(is_equal)) # <class 'function'>
# 把 is_equal 赋值个变量f
f = is_equal # 把 is_equal 对应的函数的地址赋值给了变量f, f和is_equal 具有相同的功能了
print(is_equal) # <function is_equal at 0x10813c9d0>
print(f) # <function is_equal at 0x10813c9d0>
res3 = f(1, 2)
print(res3)
# 不要使用Python已经命名过的东西作为自己的变量名
# print = is_equal
# print(1, 2)
# 匿名函数 --- 简单格式的函数的简化
'''
lambda 形参, 形参2, ... 形参n: 功能结果
'''
f1 = lambda a, b: a == b
print(f1(4, 4))
2.默认参数
函数 — 设置形参的
参与功能运算的未知项的个数
在某些场景下未知项的值是一样的, 可以给形参设置一个默认值
调用函数的时候, 如果没有给这个形参赋值, 使用的就是默认值
赋值了就是新值
print(10, 20, 30) # seq end
print(10, 20, 30, sep='*')
def add(a, b):
return a + b
# 匿名函数替代上面写法
# f = lambda a, b: a+ b
# print(f(4, 5))
# def add1 (a, b, c):
# return add(a, b) + c
# 求指定数的幂数 x ** y 默认求得是x的平方, 默认参数设置为2
def pow(x, y=2):
return x ** y
print(pow(1, 2))
print(pow(2)) # 不填写默认值是 x ** 2
print(pow(3, 3)) # 传新值计算新值
f1 = lambda x, y=2: x ** y
print(f1(2, 3))
print(f1(2))
def check_y(data):
if data > 10:
return data
else:
return data - 1
f2 = lambda x, y=2: x ** check_y(y)
print(f2(2))
print(f2(2, 4))
3.eval功能
# str(数据) ---- 把数据转化为字符串, 在数据的最外层加引号 [12, 13, 13, 4] ---- '[12, 13, 13, 4]'
# eval(数据) ---- 解析字符串, 把字符串外层的引号去掉
data = '[12, 13, 13, 4]'
print(data, type(data)) # [12, 13, 13, 4] <class 'str'>
new_data = eval(data) # [12, 13, 13, 4] <class 'list'>
print(new_data, type(new_data))
data = '12+3+45'
print(eval(data))
4.图形化界面GUI_TKINTER
tkinter 是Python自带的GUI, 图形化界面工具
import tkinter as tk # as 起别名
import tkinter.messagebox as tm # 信息框
# 1. 创建窗口
window = tk.Tk()
# 2. 设置窗口大小 'widthxheight+x+y'
window.geometry('500x300')
# 设置窗口标题
window.title('使用tkinter')
# 声明一个变量, 记录按钮有没有被点击
is_show = False # 没有显示
# 声明一个函数 --- 用于按钮的点击操作
def btn_click():
print('点击了按钮')
global is_show # 这个是用的是全局变量
if is_show is False:
# 在可变字符串中添加内容
var.set('按钮被点击') # 设置内容
# 点击状态就要发生变化
is_show = True
else:
var.set('')
# 更改点击状态
is_show = False
# 组件 --- 按钮 tk.Button(窗口,text='按钮文字',font=(字体,字号),width=宽度,height=高度,command=点击按钮执行的函数)
btn = tk.Button(window,text='我是个按钮', font=('楷体', 14), width=10,command=btn_click)
# 显示在窗口上
btn.pack()
def btn_click1():
# 获取输入框内容
content = enter1.get() # 获取输入框的内容
var.set(content)
btn1 = tk.Button(window,text='显示数据', font=('楷体', 14), width=10,command=btn_click1)
btn1.pack()
# 组件 - Label标签
# 设置一个可变的内容组件
var = tk.StringVar() # 包含可变内容的
# textvariable 内容是可变的; bg background 背景颜色; fg foreground 字体颜色
label = tk.Label(window,textvariable=var,bg='pink', fg='red', width=30)
# label.pack()
# place把他放到某个位置
label.place(x=50, y=50, width=70, height=40)
# 输入框
# show 表示输入的内容显示的样式, 如果是None, 输入什么就显示什么, 如果设置了其他的样式就按照设置显示
enter = tk.Entry(window,show='*')
enter.pack()
enter1 = tk.Entry(window,show=None)
enter1.pack()
def clear():
# 询问是否确定清除
s = tm.askokcancel(title='温馨提示', message='确定清空吗?')
if s is True:
var.set('')
btn = tk.Button(window,text='清空label上的数据', font=('楷体', 14), width=10,command=clear)
# 显示在窗口上
btn.pack()
# 3. 显示
window.mainloop()
练习: 猜数游戏
import tkinter as tk
import tkinter.messagebox as tm
import random
# 设置窗口
window = tk.Tk()
# 设置窗口大小
window.geometry('500x300')
# 设置标题
window.title('猜字游戏')
'''
------------------- 数据 ------------------
'''
true_price = random.randint(100, 300)
print(true_price)
# 需要一个提交按钮对应的函数
def submit():
global true_price
# 获取输入框中的内容
guss_price = int(input_price.get())
# 判断输入的价格范围是否合法
if 100 <= guss_price <= 300:
# 进行对比
if guss_price > true_price:
info.set('猜的价格过大')
price.set('***')
elif guss_price < true_price:
info.set('猜的价格过小')
price.set('***')
else:
info.set('恭喜,商品带回家')
# 显示真实价格
price.set(f'真实价格:guss_price')
box_msg = tm.askokcancel(title='提示',message='是否再开启一局?')
if box_msg == True:
# 把所有数据恢复到默认
refresh_data()
else:
info.set('价格不在指定范围内')
def refresh_data():
price.set('***')
info.set('请输入商品的价格')
# 修改全局的 true_price 生成新的价格
true_price = random.randint(100, 300)
print(true_price)
# 清空输入框 len获取容器类型元素个数; first 从哪开始, last从哪结束
# [first last)
input_price.delete(first=0,last=len(input_price.get()))
'''
------------------- 界面 ------------------
'''
# 价格显示label
label = tk.Label(window, text='当前商品的价格是:', bg='pink',font=('楷体', 16))
# 显示在窗口上
label.place(x=30, y=20, width=250, height=30)
# 价格label
# 创建一个可变的字符串, 为标签添加内容 value 设置起始显示的值
price = tk.StringVar(value='***')
price_label = tk.Label(window, textvariable=price, bg='pink',font=('楷体', 16))
price_label.place(x=280, y=20, width=100, height=30)
# 价格输入的提示
input_label = tk.Label(window, text='请输入100-300商品价格', bg='pink',font=('楷体', 16))
# 显示在窗口上
input_label.place(x=30, y=60, width=250, height=30)
# 价格输入框
input_price = tk.Entry(window, show=None)
input_price.place(x=30, y= 100, width=250, height=30)
# 提交按钮
submit_btn = tk.Button(window, text='提交', bg='pink',font=('楷体', 16), command=submit)
submit_btn.place(x=280, y=100, width=100, height=30)
# 右下角的提示窗
tip_label = tk.Label(window, text='提示', bg='pink',font=('楷体', 16))
# 显示在窗口上
tip_label.place(x=280, y=180, width=210, height=30)
# 右下角的提示内容
info = tk.StringVar(value='请输入商品的价格')
content_label = tk.Label(window, textvariable=info, bg='pink',font=('楷体', 16))
# 显示在窗口上
content_label.place(x=280, y=210, width=210, height=60)
# 启动窗口
window.mainloop()
4.1 tkinter基本使用
练习: 猜数字游戏
5.搭建一个计算器
import tkinter as tk
# 设置窗口
window = tk.Tk()
# 设置窗口大小
window.geometry('300x600')
window.title('我的计算器')
'''
----------------- 按钮点击的操作 ----------------
'''
# 声明一个变量, 来累计按钮点击, 形成的计算式子
content = ''
# 设置一个未知项, 用于接收哪个按钮被点击了
def btn_click(data):
global content
# pass # 空白占位符
# print(data)
if data == 'Clear':
# 清空操作
expression.set('')
result.set('')
content = ''
elif data == '=':
result.set(f'eval(content)')
else:
# 其他的数据都要显示在计算的式子中
content += data
expression.set(content)
'''
----------------- 界面 -----------------
'''
# 显示公示和结果
expression = tk.StringVar()
result = tk.StringVar()
# 式子
formula_label = tk.Label(window, textvariable=expression, font=('楷体', 16), bg='pink')
formula_label.place(x=0, y=0, width=300, height=150)
# 结果 anchor 对齐方式
res_lebel = tk.Label(window, textvariable=result, font=('楷体', 16), bg='pink', anchor='e')
res_lebel.place(x=0, y=150, width=300, height=75)
# 列表 --- 用于包含按钮上的文本 -- 二维列表
'''
列表是一个有序的序列, 显示顺序与添加顺序是一致的
有序特点: 添加到序列中的元素会为其添加一个编号, 编号从0开始[下标, 角标, 索引]
在有序的序列中可以通过数据的编号定位到对应的数据
'''
btn_datas = [
['Clear', '(', ')', '+'],
['7', '8', '9', '-'],
['4', '5', '6', '*'],
['1', '2', '3', '/'],
['**', '0', '//', '=']
]
# 获取第二行的数据
print(btn_datas[1])
# 定位到*号
print(btn_datas[2][3])
# 按钮
for i in range(5): # 行
for c in range(4): # 列
btn = tk.Button(window,text=btn_datas[i][c], font=('楷体', 20), bg='pink', command=lambda x=btn_datas[i][c]: btn_click(x))
btn.place(x=(75*c), y=225+i*75, width=75, height=75)
# 显示窗口
window.mainloop()
5.1 计算器搭建及逻辑处理
以上是关于Python3 - 函数以及GUI_TKINTER(第四天)的主要内容,如果未能解决你的问题,请参考以下文章