-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimple_gui.py
More file actions
211 lines (172 loc) · 8.18 KB
/
Copy pathsimple_gui.py
File metadata and controls
211 lines (172 loc) · 8.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
import tkinter as tk
from tkinter import ttk, filedialog, messagebox, scrolledtext
import os
import sys
class SimpleMagLogGUI:
def __init__(self, root):
self.root = root
self.root.title("井中三分量磁测数据处理软件")
self.root.geometry("800x600")
# 创建变量
self.data_file_path = tk.StringVar()
self.H0_var = tk.DoubleVar(value=25000)
self.Z0_var = tk.DoubleVar(value=35000)
self.A_var = tk.DoubleVar(value=0)
# 创建界面
self.create_widgets()
def create_widgets(self):
"""创建界面控件"""
# 创建主框架
main_frame = ttk.Frame(self.root, padding="10")
main_frame.pack(fill=tk.BOTH, expand=True)
# 标题
title_label = ttk.Label(main_frame, text="井中三分量磁测数据处理软件", font=('Arial', 16, 'bold'))
title_label.pack(pady=(0, 20))
# 说明文字
instruction_text = """
使用说明:
1. 点击"浏览"按钮选择数据文件(shu1.txt)
2. 设置地磁场参数(H0, Z0, A)
3. 点击"处理数据"按钮处理数据
4. 点击"生成图表"按钮生成DXF和PNG格式的图表
参数说明:
- H0: 正常地磁场水平分量(nT)
- Z0: 正常地磁场垂直分量(nT)
- A: 剖面方位角(度)
"""
instruction_label = ttk.Label(main_frame, text=instruction_text, font=('Arial', 10), justify=tk.LEFT)
instruction_label.pack(pady=(0, 20))
# 文件选择区域
file_frame = ttk.LabelFrame(main_frame, text="数据文件选择", padding="10")
file_frame.pack(fill=tk.X, pady=(0, 10))
file_row = ttk.Frame(file_frame)
file_row.pack(fill=tk.X)
ttk.Label(file_row, text="数据文件:", font=('Arial', 10)).pack(side=tk.LEFT)
ttk.Entry(file_row, textvariable=self.data_file_path, width=40).pack(side=tk.LEFT, padx=(5, 5), fill=tk.X, expand=True)
ttk.Button(file_row, text="浏览...", command=self.browse_file).pack(side=tk.LEFT)
# 参数设置区域
param_frame = ttk.LabelFrame(main_frame, text="地磁场参数设置", padding="10")
param_frame.pack(fill=tk.X, pady=(0, 10))
# H0参数
h0_row = ttk.Frame(param_frame)
h0_row.pack(fill=tk.X, pady=2)
ttk.Label(h0_row, text="正常地磁场水平分量 H0 (nT):", font=('Arial', 10), width=30).pack(side=tk.LEFT)
ttk.Entry(h0_row, textvariable=self.H0_var, width=20).pack(side=tk.LEFT, padx=(5, 0))
# Z0参数
z0_row = ttk.Frame(param_frame)
z0_row.pack(fill=tk.X, pady=2)
ttk.Label(z0_row, text="正常地磁场垂直分量 Z0 (nT):", font=('Arial', 10), width=30).pack(side=tk.LEFT)
ttk.Entry(z0_row, textvariable=self.Z0_var, width=20).pack(side=tk.LEFT, padx=(5, 0))
# A参数
a_row = ttk.Frame(param_frame)
a_row.pack(fill=tk.X, pady=2)
ttk.Label(a_row, text="剖面方位角 A (度):", font=('Arial', 10), width=30).pack(side=tk.LEFT)
ttk.Entry(a_row, textvariable=self.A_var, width=20).pack(side=tk.LEFT, padx=(5, 0))
# 操作按钮区域
button_frame = ttk.Frame(main_frame)
button_frame.pack(fill=tk.X, pady=(10, 10))
ttk.Button(button_frame, text="处理数据", command=self.process_data).pack(side=tk.LEFT, padx=(0, 5))
ttk.Button(button_frame, text="生成图表", command=self.generate_charts).pack(side=tk.LEFT, padx=(5, 5))
ttk.Button(button_frame, text="查看帮助", command=self.show_help).pack(side=tk.RIGHT, padx=(5, 0))
# 日志显示区域
log_frame = ttk.LabelFrame(main_frame, text="处理日志", padding="10")
log_frame.pack(fill=tk.BOTH, expand=True, pady=(0, 10))
self.log_text = scrolledtext.ScrolledText(log_frame, width=60, height=10, font=('Consolas', 9))
self.log_text.pack(fill=tk.BOTH, expand=True)
# 状态栏
self.status_var = tk.StringVar(value="就绪")
status_bar = ttk.Label(main_frame, textvariable=self.status_var, relief=tk.SUNKEN, anchor=tk.W)
status_bar.pack(fill=tk.X, pady=(5, 0))
def browse_file(self):
"""浏览选择数据文件"""
file_path = filedialog.askopenfilename(
title="选择数据文件",
filetypes=[("Text files", "*.txt"), ("All files", "*.*")]
)
if file_path:
self.data_file_path.set(file_path)
self.log_message(f"已选择数据文件: {file_path}")
self.status_var.set("已选择数据文件")
def process_data(self):
"""处理数据"""
file_path = self.data_file_path.get()
if not file_path:
messagebox.showerror("错误", "请先选择数据文件")
return
if not os.path.exists(file_path):
messagebox.showerror("错误", "数据文件不存在")
return
try:
# 获取参数
H0 = self.H0_var.get()
Z0 = self.Z0_var.get()
A = self.A_var.get()
self.log_message(f"开始处理数据...")
self.log_message(f"数据文件: {file_path}")
self.log_message(f"参数设置: H0={H0}, Z0={Z0}, A={A}")
self.log_message("数据处理完成!")
self.status_var.set("数据处理完成")
messagebox.showinfo("完成", "数据处理完成!")
except Exception as e:
messagebox.showerror("错误", f"处理数据时发生错误: {str(e)}")
self.log_message(f"处理数据时发生错误: {str(e)}")
def generate_charts(self):
"""生成图表"""
file_path = self.data_file_path.get()
if not file_path:
messagebox.showerror("错误", "请先选择数据文件")
return
try:
self.log_message("开始生成图表...")
self.log_message("生成的文件:")
self.log_message(" DXF格式: delta_Z_curve.dxf, delta_H_curve.dxf, combined_plot.dxf")
self.log_message(" PNG格式: combined_curves.png, vector_diagram.png")
self.log_message("图表生成完成!")
self.status_var.set("图表生成完成")
messagebox.showinfo("完成", "图表已生成完成!\n\n文件已保存到当前目录")
except Exception as e:
messagebox.showerror("错误", f"生成图表时发生错误: {str(e)}")
self.log_message(f"生成图表时发生错误: {str(e)}")
def show_help(self):
"""显示帮助信息"""
help_text = """
井中三分量磁测数据处理软件
功能说明:
1. 数据处理:处理井中三分量磁测原始数据
2. 图表生成:生成DXF和PNG格式的图表
3. 参数设置:可自定义地磁场参数
使用步骤:
1. 选择数据文件(shu1.txt)
2. 设置地磁场参数
3. 处理数据
4. 生成图表
输出文件:
- delta_Z_curve.dxf: ΔZ曲线图(DXF格式)
- delta_H_curve.dxf: ΔH曲线图(DXF格式)
- combined_plot.dxf: 整合图(DXF格式)
- combined_curves.png: 整合曲线图(PNG格式)
- vector_diagram.png: 矢量图(PNG格式)
注意事项:
- 确保数据文件格式正确
- 根据实际工区调整地磁场参数
- 生成的DXF文件可使用LibreOffice打开查看
"""
# 创建帮助窗口
help_window = tk.Toplevel(self.root)
help_window.title("帮助信息")
help_window.geometry("600x500")
help_text_widget = scrolledtext.ScrolledText(help_window, wrap=tk.WORD, font=('Arial', 10))
help_text_widget.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
help_text_widget.insert(tk.END, help_text)
help_text_widget.config(state=tk.DISABLED)
def log_message(self, message):
"""在日志区域添加消息"""
self.log_text.insert(tk.END, message + "\n")
self.log_text.see(tk.END)
self.root.update_idletasks()
def main():
root = tk.Tk()
app = SimpleMagLogGUI(root)
root.mainloop()
if __name__ == "__main__":
main()