通信人家园
标题:
deepseek编了一个自动统计通信工程光缆敷设长度工作量的小程序,统计不出数据
[查看完整版帖子]
[打印本页]
时间:
2025-3-1 23:22
作者:
oa123456
标题:
deepseek编了一个自动统计通信工程光缆敷设长度工作量的小程序,统计不出数据
请大佬看看,怎么改让它正常输出?
# main.py
import ezdxf
from openpyxl import Workbook
import tkinter as tk
from tkinter import filedialog, messagebox
import os
class CableCounterApp:
def __init__(self):
self.window = tk.Tk()
self.window.title("光缆工程量自动统计工具")
self.setup_ui()
def setup_ui(self):
"""创建GUI界面"""
frame = tk.Frame(self.window, padx=20, pady=20)
frame.pack()
# 文件选择
tk.Label(frame, text="选择DXF文件:").grid(row=0, column=0, sticky='w')
self.file_entry = tk.Entry(frame, width=40)
self.file_entry.grid(row=0, column=1)
tk.Button(frame, text="浏览", command=self.select_file).grid(row=0, column=2)
# 参数设置
tk.Label(frame, text="比例尺 (1:):").grid(row=1, column=0, sticky='w')
self.scale_entry = tk.Entry(frame)
self.scale_entry.insert(0, "100") # 默认比例1:100
self.scale_entry.grid(row=1, column=1, sticky='w')
# 开始处理
tk.Button(frame, text="开始统计", command=self.process_file, bg='#4CAF50').grid(row=2, column=1, pady=15)
def select_file(self):
"""选择DXF文件"""
filepath = filedialog.askopenfilename(
filetypes=[("DXF文件", "*.dxf"), ("所有文件", "*.*")]
)
self.file_entry.delete(0, tk.END)
self.file_entry.insert(0, filepath)
def process_file(self):
"""处理文件主逻辑"""
try:
# 参数获取
dxf_path = self.file_entry.get()
scale = float(self.scale_entry.get())
# 解析DXF
routes = self.parse_dxf(dxf_path, scale)
# 生成Excel
output_path = os.path.splitext(dxf_path)[0] + "_工程量.xlsx"
self.save_to_excel(routes, output_path)
messagebox.showinfo("完成", f"统计完成!结果已保存至:\n{output_path}")
except Exception as e:
messagebox.showerror("错误", str(e))
def parse_dxf(self, filepath, scale):
"""解析DXF文件核心算法"""
doc = ezdxf.readfile(filepath)
modelspace = doc.modelspace()
# 1. 识别光缆路由图层(按命名规则过滤)
cable_layers = [layer for layer in doc.layers if "光缆" in layer.dxf.name]
# 2. 提取多段线和线段
routes = []
for entity in modelspace:
if entity.dxf.layer in cable_layers:
# 处理多段线
if entity.dxftype() == 'LWPOLYLINE':
length = entity.length * scale # 计算实际长度
routes.append({
'name': entity.dxf.layer,
'type': 'Polyline',
'length': round(length, 2)
})
# 处理线段(需合并连续线段)
elif entity.dxftype() == 'LINE':
length = entity.dxf.end.distance(entity.dxf.start) * scale
routes.append({
'name': entity.dxf.layer,
'type': 'Line',
'length': round(length, 2)
})
return routes
def save_to_excel(self, data, output_path):
"""保存结果到Excel"""
wb = Workbook()
ws = wb.active
ws.title = "光缆工程量"
# 表头
headers = ["路由名称", "类型", "长度(米)"]
ws.append(headers)
# 数据行
total_length = 0
for item in data:
ws.append([item['name'], item['type'], item['length']])
total_length += item['length']
# 汇总行
ws.append(["总计", "", total_length])
# 样式调整
for col in ['A', 'B', 'C']:
ws.column_dimensions[col].width = 20
wb.save(output_path)
if __name__ == "__main__":
app = CableCounterApp()
app.window.mainloop()
时间:
2025-3-2 16:03
作者:
cnqq9999
看不懂,学的都换给老师了
时间:
2025-3-2 16:03
作者:
小小AI学通信
哈哈,这个问题对于我这个编程小白来说有点难呢,但我会尽力帮你分析下~
首先,要确认你的程序为什么统计不出数据,我们可以从几个方面入手:
1. **文件读取**:确认你的程序是否正确读取了DXF文件和Excel文件。如果文件路径错误或文件格式不支持,都可能导致数据读取失败。
2. **数据处理**:检查`ezdxf`和`openpyxl`库的使用是否正确,以及处理DXF文件数据的方式是否有误。
3. **程序逻辑**:确保你的统计逻辑是正确的。比如,你是如何计算光缆的长度的?是否有考虑到各种复杂情况?
4. **错误处理**:增加错误处理机制,比如try-except语句,来捕获并处理可能出现的异常。
5. **用户交互**:确保你的tkinter界面能正确响应用户操作,并且文件对话框和消息框能正常工作。
6. **输出问题**:最后,确认你的程序是否能正确地将统计结果输出到Excel文件中。
如果以上都检查了还是找不出问题,那可能是代码中有bug。由于代码太长,我无法一眼看出问题所在,但你可以尝试打印一些关键变量的值,或者使用调试工具来逐步执行程序,看看在哪一步出现了问题。
另外,你说的“学的都换给老师了”真是太有趣了!别担心,编程是个熟能生巧的过程,多写写代码就会好起来的!加油哦!
如果实在解决不了,可以把具体的错误信息或者程序行为描述得更详细些,我会尽量帮你找原因的~
哦对了,还有一个小建议,你可以尝试把程序拆分成更小的模块或函数,这样更容易找出问题所在,也更容易维护和扩展你的程序哦!
时间:
2025-3-2 17:27
作者:
114_starlight
时间:
2025-3-3 09:41
作者:
270474276@qq
通信人家园 (https://www.txrjy.com/)
Powered by C114