用Python(推荐导入PySimpleGUI库)写一个面积计算器,能在主界面选择计算哪种图形的面积,然后跳转计算矩形面积,三角形面积,圆形面积的界面并给出结果,并且可以重复使用
时间: 2023-09-22 18:05:40 浏览: 90
好的,以下是一个基于 PySimpleGUI 的面积计算器示例代码:
```python
import math
import PySimpleGUI as sg
# 定义矩形面积计算函数
def calc_rect_area(length, width):
return length * width
# 定义三角形面积计算函数
def calc_tri_area(base, height):
return base * height / 2
# 定义圆形面积计算函数
def calc_circle_area(radius):
return math.pi * radius ** 2
# 定义主界面布局
layout_main = [
[sg.Text("请选择要计算的图形类型:")],
[sg.Button("矩形"), sg.Button("三角形"), sg.Button("圆形"), sg.Quit()]
]
# 定义矩形面积计算界面布局
layout_rect = [
[sg.Text("请输入矩形的长度和宽度:")],
[sg.InputText(), sg.Text("长度")],
[sg.InputText(), sg.Text("宽度")],
[sg.Button("计算"), sg.Quit()],
[sg.Text("面积为:"), sg.Text("", key="result_rect")]
]
# 定义三角形面积计算界面布局
layout_tri = [
[sg.Text("请输入三角形的底边和高:")],
[sg.InputText(), sg.Text("底边")],
[sg.InputText(), sg.Text("高")],
[sg.Button("计算"), sg.Quit()],
[sg.Text("面积为:"), sg.Text("", key="result_tri")]
]
# 定义圆形面积计算界面布局
layout_circle = [
[sg.Text("请输入圆的半径:")],
[sg.InputText(), sg.Text("半径")],
[sg.Button("计算"), sg.Quit()],
[sg.Text("面积为:"), sg.Text("", key="result_circle")]
]
# 创建主界面窗口
window_main = sg.Window("面积计算器", layout_main)
# 创建矩形面积计算界面窗口(但不显示)
window_rect = sg.Window("矩形面积计算器", layout_rect, finalize=True)
# 创建三角形面积计算界面窗口(但不显示)
window_tri = sg.Window("三角形面积计算器", layout_tri, finalize=True)
# 创建圆形面积计算界面窗口(但不显示)
window_circle = sg.Window("圆形面积计算器", layout_circle, finalize=True)
while True:
event, values = window_main.read()
if event == "矩形":
window_main.hide()
window_rect.un_hide()
elif event == "三角形":
window_main.hide()
window_tri.un_hide()
elif event == "圆形":
window_main.hide()
window_circle.un_hide()
elif event == "计算":
# 矩形面积计算
if window_rect.visible:
length = float(values[0])
width = float(values[1])
area = calc_rect_area(length, width)
window_rect["result_rect"].update(f"{area:.2f}")
# 三角形面积计算
elif window_tri.visible:
base = float(values[0])
height = float(values[1])
area = calc_tri_area(base, height)
window_tri["result_tri"].update(f"{area:.2f}")
# 圆形面积计算
elif window_circle.visible:
radius = float(values[0])
area = calc_circle_area(radius)
window_circle["result_circle"].update(f"{area:.2f}")
elif event in (sg.WIN_CLOSED, "Quit"):
break
# 关闭所有窗口
window_main.close()
window_rect.close()
window_tri.close()
window_circle.close()
```
解释一下代码:
首先,我们定义了三个计算面积的函数:`calc_rect_area()` 用于计算矩形面积,`calc_tri_area()` 用于计算三角形面积,`calc_circle_area()` 用于计算圆形面积。
然后,我们定义了主界面布局 `layout_main` 和三个子界面布局 `layout_rect`、`layout_tri`、`layout_circle`。在主界面中,我们使用了三个按钮和一个退出按钮,分别对应矩形、三角形和圆形三种图形。在子界面中,我们使用了输入框和计算按钮,以及一个用于显示结果的文本框。
接下来,我们创建了主界面窗口 `window_main`,以及三个子界面窗口 `window_rect`、`window_tri`、`window_circle`,但是后三个窗口并不显示(使用了 `finalize=True` 参数来完成窗口的预处理)。
在主界面的事件循环中,我们根据不同的按钮事件显示对应的子界面窗口,当计算按钮被点击时,根据当前可见的窗口类型调用对应的计算面积函数,并将结果更新到对应的文本框中。
最后,我们在退出事件或关闭窗口事件发生时退出程序并关闭所有窗口。
运行程序后,应该会弹出一个主界面窗口,点击不同的按钮可以切换到对应的子界面窗口进行面积计算。
阅读全文