用python写一个tkinter小程序,首先需要输入值为流速u的值,选择管子数量n为1-20,选择后下方将出现n行,每行首列选择“直管”,“弯管”,”变径管“中的一个。其中,选择“直管”行需要输入“内径”,“长度”,粗糙度”三个参数,并计算出结果,“流阻”=“内径”*“长度”+“粗糙度”,输出结果在本行最后一列;“弯管”行需要输入“内径”,“转弯角度”,转弯半径”三个参数,并计算出结果,“流阻”=“内径”-“转弯角度”+“转弯半径”,输出结果在本行最后一列;“变径管”行需要输入“内径1”,“内径2”两个参数,并计算出结果,“流阻”=“内径1”/“内径2”,输出结果在本行最后一列。保存以上n行最后一列输出结果,并在最后一行输出n行结果之和。(“内径”,“长度”,粗糙度”,“转弯角度”,转弯半径”,“内径1”,“内径2”等参数标题需要体现出来。
时间: 2023-09-13 15:08:28 浏览: 253
好的,以下是一个简单的实现,代码如下:
```python
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
# 输入流速u的值
self.u_label = tk.Label(self, text="流速u:")
self.u_label.grid(row=0, column=0)
self.u_entry = tk.Entry(self)
self.u_entry.grid(row=0, column=1)
# 选择管子数量n为1-20
self.n_label = tk.Label(self, text="管子数量n:")
self.n_label.grid(row=1, column=0)
self.n_var = tk.StringVar()
self.n_option = tk.OptionMenu(self, self.n_var, *range(1, 21))
self.n_option.grid(row=1, column=1)
self.n_var.set(1)
# 选择管子类型
self.type_labels = []
self.entries = []
self.results = []
self.type_options = ["直管", "弯管", "变径管"]
for i in range(20):
row = i + 2
type_var = tk.StringVar()
type_option = tk.OptionMenu(self, type_var, *self.type_options, command=lambda var=type_var, row=row: self.show_entry(var.get(), row))
type_option.grid(row=row, column=0)
type_var.set("直管")
self.type_labels.append(tk.Label(self, text="内径", width=10))
self.entries.append([tk.Entry(self) for _ in range(3)])
self.results.append(tk.Label(self, text="", width=10))
for j in range(3):
self.type_labels[-1].grid(row=row, column=2*j+1)
self.entries[-1][j].grid(row=row, column=2*j+2)
self.results[-1].grid(row=row, column=7)
# 计算总结果
self.sum_label = tk.Label(self, text="总结果:")
self.sum_label.grid(row=22, column=6)
self.sum_result = tk.Label(self, text="", width=10)
self.sum_result.grid(row=22, column=7)
# 计算按钮
self.calculate_button = tk.Button(self, text="计算", command=self.calculate)
self.calculate_button.grid(row=23, column=7)
def show_entry(self, type_str, row):
if type_str == "直管":
for i, label_str in enumerate(["内径", "长度", "粗糙度"]):
self.type_labels[row-2].config(text=label_str)
self.entries[row-2][i].grid()
for i in range(3, len(self.entries[row-2])):
self.entries[row-2][i].grid_remove()
elif type_str == "弯管":
for i, label_str in enumerate(["内径", "转弯角度", "转弯半径"]):
self.type_labels[row-2].config(text=label_str)
self.entries[row-2][i].grid()
self.entries[row-2][3].grid_remove()
self.entries[row-2][4].grid_remove()
elif type_str == "变径管":
for i, label_str in enumerate(["内径1", "内径2"]):
self.type_labels[row-2].config(text=label_str)
self.entries[row-2][i].grid()
for i in range(2, len(self.entries[row-2])):
self.entries[row-2][i].grid_remove()
def calculate(self):
# 读取输入值
u = float(self.u_entry.get())
n = int(self.n_var.get())
# 计算每个管子的流阻并显示结果
sum_result = 0
for i in range(n):
if self.type_labels[i].cget("text") == "内径":
d, l, e = map(float, [entry.get() for entry in self.entries[i]])
result = d * l + e
elif self.type_labels[i].cget("text") == "转弯角度":
d, angle, r = map(float, [entry.get() for entry in self.entries[i]][:3])
result = d - angle + r
elif self.type_labels[i].cget("text") == "内径1":
d1, d2 = map(float, [entry.get() for entry in self.entries[i]][:2])
result = d1 / d2
self.results[i].config(text="{:.3f}".format(result))
sum_result += result
# 显示总结果
self.sum_result.config(text="{:.3f}".format(sum_result))
root = tk.Tk()
app = Application(master=root)
app.mainloop()
```
这个程序使用了 Python 的 GUI 库 tkinter,通过创建各种 GUI 控件来实现程序的功能。可以通过选择管子类型来动态显示不同的输入框,然后计算每个管子的流阻并将结果显示在界面上。最后,将所有管子的结果相加并显示在最后一行。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![py](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)