Skip to content

坐标对比的GUI程序实现

最近研习 python 的时候,遇到一个需求:需要把一个文件中的两组坐标数组数据进行整合抽取,并在其中找出所有符合位置相近的坐标从而获取均差

这里为了方便使用,我引用了 tkinter 来生成 GUI 程序,并通过 os 来对文件进行操作,最后使用自带的 statistics 库来实现均差的计算。

整体代码

python
import statistics
from tkinter import *
from tkinter import filedialog
from tkinter import scrolledtext
import os
import json

root = Tk()
root.title('数据分析')
# root.iconbitmap('test.ico')
root.geometry('700x500')
# root.config(bg='white')

content = ''
def handle_click():
    file_path = filedialog.askopenfilename()  # 打开文件对话框
    if file_path:  # 如果用户选择了文件
        print("选中的文件:", file_path)
        # 你可以在这里添加更多代码来处理文件,例如读取文件内容或验证格式
        file_extension = os.path.splitext(file_path)[1]  # 获取文件扩展名
        print("文件扩展名:", file_extension)
        # 控制文件格式,例如只允许特定格式的文件
        if file_extension in ['.csv']:  # 例如,只允许txt和csv文件
            print("已接受的文件格式")
            entry1.insert(0, file_path)
            # 打开并读取文件内容
            with open(file_path, 'r', encoding='utf-8') as file:
              global content
              content= file.read()
            # 在Text组件中显示文件内容
            text_area.delete('1.0', END)  # 清空Text组件
            text_area.insert(END, content)  # 插入文件内容
        else:
            print("不支持的文件格式")
    else:
        print("未选择文件")
        return

frm = Frame(root)
frm.grid(padx='20', pady='10')

button = Button(frm,text="上传文件",activeforeground="blue", activebackground="#999",command=handle_click)
button.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')

entry1 = Entry(frm, width=40)
entry1.grid(row=0, column=1)

# 创建滚动文本区域以显示文件内容
text_area = scrolledtext.ScrolledText(root, wrap=WORD, width=80, height=20)
text_area.grid(padx='20',pady=20)

result = []

def get_mean_deviation():
    global result
    f_list = content.split('\n')
    r_list = []
    for i in f_list:
        if i== '':
            pass
        else:
            m = i.split(',')
            print(m)
            r_list.append(m)
    r_list1 = r_list
    for i in r_list:
        for m in r_list1:
            if i[0]==m[0] and i[1]==m[1]:
                pass
            else:
                if abs(json.loads(i[0]) - json.loads(m[0]))<1 and abs(json.loads(i[1]) - json.loads(m[1]))<1:
                    result.append(abs(json.loads(i[0]) - json.loads(m[0])) + abs(json.loads(i[1]) - json.loads(m[1])))
    entry2.insert(0,statistics.mean(result))

act_frm = Frame(root)
act_frm.grid(padx='20', pady='0')

mean_deviation = Button(act_frm,text="获取均差",command=get_mean_deviation)
mean_deviation.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')

entry2 = Entry(act_frm, width=40)
entry2.grid(row=0, column=1)

mainloop()