From 511f9f4da809f8ed2199f737a8e4cf5464acd1b6 Mon Sep 17 00:00:00 2001 From: RB Date: Sat, 24 May 2025 23:49:21 +0800 Subject: [PATCH] =?UTF-8?q?MR=5FTool=E5=88=9D=E6=9C=89=E6=88=90=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 8196 -> 8196 bytes .gitignore | 4 + MR_Tool.py | 897 +++++++++++++++++++++++++++++++++++++++++ MR_Toolbox.py | 92 ----- README.md | 3 +- data.xlsx | Bin 8674 -> 0 bytes mr_tool_img/MRobot.png | Bin 0 -> 97868 bytes pitch.png | Bin 23534 -> 0 bytes polynomial.py | 304 +++++++------- 9 files changed, 1060 insertions(+), 240 deletions(-) create mode 100644 MR_Tool.py delete mode 100644 MR_Toolbox.py delete mode 100644 data.xlsx create mode 100644 mr_tool_img/MRobot.png delete mode 100644 pitch.png diff --git a/.DS_Store b/.DS_Store index aae880c6919ccbe548cb9edc0e55dd17c3b7095f..df9cca7a8dd69b38c23d33f8abfa725d47b737c8 100644 GIT binary patch delta 416 zcmZp1XmOa}FD%Qzz`)4BAi%(o?wOOHoRpKFw6Sm+`@{zR&Fma39PA)@RtCe#0YYLT z4C{ev`Tm0eP?&*%4Jc6~Ai>9!4&=;(NlfMuNS9}2NMa~u$YjW2NP(FPR0Fhzu^VK_ z zAq@FIn8TpQP{2?*Sxrd3o|_?;p$I5b0+opeTAPdTFw|i{ucG*lAI-cZpzaEwsl`BZ zQyG#`9SsTs6y2O)-TA;^$e;W|uz&J$AtO;DjD*CbS}^pi3~ZDn}pOi-xhk! Sw3%Jv8_VP_A$cJ01rq=}QEyuS delta 105 zcmV-v0G9uRK!iY$PZbmZ0003101yBGV*p_QZU8O-V@YhWah3;>fDN+;2m}ZL6q8~Q zXOr^~GP5)iI02Is6q*YN0B`_l0CWIj0BDmT6cm#Q6%&)N6fm作者: QUT RMer & RCer   |   " + "版本: 0.0.2   |   " + "联系方式: QQ群 : 857466609" + ) + info.setFont(QFont("微软雅黑", 14)) + info.setAlignment(Qt.AlignCenter) + info.setStyleSheet("color: #7f8c8d; margin-top: 24px;") + info.setFixedHeight(100) # 修改为固定高度 + layout.addWidget(info) + + # 页脚 + footer = QLabel("© 2025 MRobot. 保留所有权利。") + footer.setFont(QFont("微软雅黑", 12)) + footer.setAlignment(Qt.AlignCenter) + footer.setStyleSheet("color: #b2bec3; margin-top: 18px;") + footer.setFixedHeight(100) # 修改为固定高度 + layout.addWidget(footer) + + +# --------- 功能一:多项式拟合工具页面 --------- +class PolyFitApp(QWidget): + def __init__(self): + super().__init__() + self.setFont(QFont("微软雅黑", 15)) + self.data_x = [] + self.data_y = [] + self.last_coeffs = None + self.last_xmin = None + self.last_xmax = None + + # 统一背景和边框 + self.setStyleSheet(""" + QWidget { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + border-radius: 16px; + border: 1px solid #d6eaf8; + } + """) + + main_layout = QHBoxLayout(self) + main_layout.setContentsMargins(24, 24, 24, 24) + main_layout.setSpacing(24) + left_layout = QVBoxLayout() + left_layout.setSpacing(18) + right_layout = QVBoxLayout() + right_layout.setSpacing(18) + main_layout.addLayout(left_layout, 0) + main_layout.addLayout(right_layout, 1) + + # 标题 + title = QLabel("曲线拟合工具") + # title.setFont(QFont("微软雅黑", 2, QFont.Bold)) + # 设置文字大小 + title.setFont(QFont("微软雅黑", 14, QFont.Bold)) + title.setAlignment(Qt.AlignCenter) + title.setStyleSheet("color: #2980b9; letter-spacing: 2px;") + left_layout.addWidget(title) + + # 数据表 + self.table = QTableWidget(0, 2) + self.table.setFont(QFont("Consolas", 16)) + self.table.setHorizontalHeaderLabels(["x", "y"]) + self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.table.setSelectionBehavior(QTableWidget.SelectRows) + self.table.setStyleSheet(""" + QTableWidget { + background: #f8fbfd; + border-radius: 10px; + border: 1px solid #d6eaf8; + font-size: 16px; + } + QHeaderView::section { + background-color: #eaf6fb; + color: #2980b9; + font-size: 16px; + font-weight: bold; + border: 1px solid #d6eaf8; + height: 36px; + } + """) + self.table.setMinimumHeight(200) # 设置最小高度 + left_layout.addWidget(self.table, stretch=1) # 让表格尽量撑大 + + # 添加/删除行 + btn_row = QHBoxLayout() + self.add_row_btn = QPushButton("添加数据") + self.add_row_btn.setFont(QFont("微软雅黑", 20, QFont.Bold)) + self.add_row_btn.setMinimumHeight(44) + self.add_row_btn.clicked.connect(self.add_point_row) + self.del_row_btn = QPushButton("删除选中行") + self.del_row_btn.setFont(QFont("微软雅黑", 20, QFont.Bold)) + self.del_row_btn.setMinimumHeight(44) + self.del_row_btn.clicked.connect(self.delete_selected_rows) + for btn in [self.add_row_btn, self.del_row_btn]: + btn.setStyleSheet(""" + QPushButton { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + color: #2980b9; + border-radius: 20px; + font-size: 20px; + font-weight: 600; + padding: 10px 0; + border: 1px solid #d6eaf8; + } + QPushButton:hover { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #f8fffe, stop:1 #cfe7fa); + color: #1a6fae; + border: 1.5px solid #b5d0ea; + } + QPushButton:pressed { + background: #e3f0fa; + color: #2471a3; + border: 1.5px solid #a4cbe3; + } + """) + btn_row.addWidget(self.add_row_btn) + btn_row.addWidget(self.del_row_btn) + left_layout.addLayout(btn_row) + + # 导入/导出 + file_btn_row = QHBoxLayout() + self.import_btn = QPushButton("导入Excel文件") + self.import_btn.setFont(QFont("微软雅黑", 18, QFont.Bold)) + self.import_btn.setMinimumHeight(44) + self.import_btn.clicked.connect(self.load_excel) + self.export_btn = QPushButton("导出Excel文件") + self.export_btn.setFont(QFont("微软雅黑", 18, QFont.Bold)) + self.export_btn.setMinimumHeight(44) + self.export_btn.clicked.connect(self.export_excel_and_plot) + for btn in [self.import_btn, self.export_btn]: + btn.setStyleSheet(""" + QPushButton { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + color: #2980b9; + border-radius: 20px; + font-size: 20px; + font-weight: 600; + padding: 10px 0; + border: 1px solid #d6eaf8; + } + QPushButton:hover { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #f8fffe, stop:1 #cfe7fa); + color: #1a6fae; + border: 1.5px solid #b5d0ea; + } + QPushButton:pressed { + background: #e3f0fa; + color: #2471a3; + border: 1.5px solid #a4cbe3; + } + """) + file_btn_row.addWidget(self.import_btn) + file_btn_row.addWidget(self.export_btn) + left_layout.addLayout(file_btn_row) + + # 阶数选择 + param_layout = QHBoxLayout() + label_order = QLabel("多项式阶数:") + # 文字居中 + label_order.setAlignment(Qt.AlignCenter) + # 文字加粗 + label_order.setStyleSheet("color: #2980b9;") + param_layout.addWidget(label_order) + self.order_spin = QSpinBox() + self.order_spin.setFont(QFont("微软雅黑", 18)) + self.order_spin.setRange(1, 10) + self.order_spin.setValue(2) + self.order_spin.setStyleSheet(""" + QSpinBox { + background: #f8fbfd; + border-radius: 10px; + border: 1px solid #d6eaf8; + font-size: 18px; + padding: 4px 12px; + } + """) + param_layout.addWidget(self.order_spin) + left_layout.addLayout(param_layout) + + # 拟合按钮 + self.fit_btn = QPushButton("拟合并显示") + self.fit_btn.setFont(QFont("微软雅黑", 20, QFont.Bold)) + self.fit_btn.setMinimumHeight(48) + self.fit_btn.clicked.connect(self.fit_and_plot) + self.fit_btn.setStyleSheet(""" + QPushButton { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + color: #2980b9; + border-radius: 20px; + font-size: 22px; + font-weight: 600; + padding: 12px 0; + border: 1px solid #d6eaf8; + } + QPushButton:hover { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #f8fffe, stop:1 #cfe7fa); + color: #1a6fae; + border: 1.5px solid #b5d0ea; + } + QPushButton:pressed { + background: #e3f0fa; + color: #2471a3; + border: 1.5px solid #a4cbe3; + } + """) + left_layout.addWidget(self.fit_btn) + # 输出区 + self.output = QTextEdit() + self.output.setReadOnly(False) + self.output.setFont(QFont("Consolas", 16)) + self.output.setMaximumHeight(160) + self.output.setStyleSheet(""" + QTextEdit { + background: #f4f6f7; + border-radius: 8px; + border: 1px solid #d6eaf8; + font-size: 16px; + color: #2c3e50; + padding: 10px; + } + """) + # self.table.setFixedHeight(400) # 设置表格高度为260像素 + left_layout.addWidget(self.output) + # 代码生成 + code_layout = QHBoxLayout() + label_code = QLabel("输出代码格式:") + # label_code.setFont(QFont("微软雅黑", 18, QFont.Bold)) + label_code.setStyleSheet("color: #2980b9;") + code_layout.addWidget(label_code) + self.code_type = QComboBox() + self.code_type.setFont(QFont("微软雅黑", 18)) + self.code_type.addItems(["C", "C++", "Python"]) + self.code_type.setStyleSheet(""" + QComboBox { + background: #f8fbfd; + border-radius: 10px; + border: 1px solid #d6eaf8; + font-size: 18px; + padding: 4px 12px; + } + """) + code_layout.addWidget(self.code_type) + self.gen_code_btn = QPushButton("生成代码") + self.gen_code_btn.setFont(QFont("微软雅黑", 18, QFont.Bold)) + self.gen_code_btn.setMinimumHeight(44) + self.gen_code_btn.clicked.connect(self.generate_code) + self.gen_code_btn.setStyleSheet(""" + QPushButton { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + color: #2980b9; + border-radius: 20px; + font-size: 20px; + font-weight: 600; + padding: 10px 0; + border: 1px solid #d6eaf8; + } + QPushButton:hover { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #f8fffe, stop:1 #cfe7fa); + color: #1a6fae; + border: 1.5px solid #b5d0ea; + } + QPushButton:pressed { + background: #e3f0fa; + color: #2471a3; + border: 1.5px solid #a4cbe3; + } + """) + code_layout.addWidget(self.gen_code_btn) + left_layout.addLayout(code_layout) + + + # 曲线区加圆角和阴影 + curve_frame = QFrame() + curve_frame.setStyleSheet(""" + QFrame { + background: #fff; + border-radius: 16px; + border: 1px solid #d6eaf8; + } + """) + curve_shadow = QGraphicsDropShadowEffect(self) + curve_shadow.setBlurRadius(24) + curve_shadow.setOffset(0, 4) + curve_shadow.setColor(Qt.gray) + curve_frame.setGraphicsEffect(curve_shadow) + curve_layout = QVBoxLayout(curve_frame) + curve_layout.setContentsMargins(10, 10, 10, 10) + self.figure = Figure(figsize=(6, 5)) + self.canvas = FigureCanvas(self.figure) + curve_layout.addWidget(self.canvas) + right_layout.addWidget(curve_frame) + + # 默认显示空坐标系 + self.figure.clear() + ax = self.figure.add_subplot(111) + # ax.set_title("拟合结果", fontsize=22, fontweight='bold') + ax.set_xlabel("x", fontsize=18) + ax.set_ylabel("y", fontsize=18) + ax.tick_params(labelsize=15) + # ax.set_title("拟合结果", fontsize=22, fontweight='bold') # 中文标题 + self.canvas.draw() + + def add_point_row(self, x_val="", y_val=""): + row = self.table.rowCount() + self.table.insertRow(row) + self.table.setItem(row, 0, QTableWidgetItem(str(x_val))) + self.table.setItem(row, 1, QTableWidgetItem(str(y_val))) + + def delete_selected_rows(self): + selected = self.table.selectionModel().selectedRows() + for idx in sorted(selected, reverse=True): + self.table.removeRow(idx.row()) + + def load_excel(self): + file, _ = QFileDialog.getOpenFileName(self, "选择Excel文件", "", "Excel Files (*.xlsx *.xls)") + if file: + try: + data = pd.read_excel(file, usecols=[0, 1]) + new_x = data.iloc[:, 0].values.tolist() + new_y = data.iloc[:, 1].values.tolist() + for x, y in zip(new_x, new_y): + self.add_point_row(x, y) + QMessageBox.information(self, "成功", "数据导入成功!") + except Exception as e: + QMessageBox.critical(self, "错误", f"读取Excel失败: {e}") + + def export_excel_and_plot(self): + file, _ = QFileDialog.getSaveFileName(self, "导出Excel文件", "", "Excel Files (*.xlsx *.xls)") + if file: + x_list, y_list = [], [] + for row in range(self.table.rowCount()): + try: + x = float(self.table.item(row, 0).text()) + y = float(self.table.item(row, 1).text()) + x_list.append(x) + y_list.append(y) + except Exception: + continue + if not x_list or not y_list: + QMessageBox.warning(self, "导出失败", "没有可导出的数据!") + return + df = pd.DataFrame({'x': x_list, 'y': y_list}) + try: + df.to_excel(file, index=False) + png_file = file + if png_file.lower().endswith('.xlsx') or png_file.lower().endswith('.xls'): + png_file = png_file.rsplit('.', 1)[0] + '.png' + else: + png_file = png_file + '.png' + self.figure.savefig(png_file, dpi=150, bbox_inches='tight') + QMessageBox.information(self, "导出成功", f"数据已成功导出到Excel文件!\n图像已导出为:{png_file}") + except Exception as e: + QMessageBox.critical(self, "导出错误", f"导出Excel或图像失败: {e}") + + def get_manual_points(self): + x_list, y_list = [], [] + for row in range(self.table.rowCount()): + try: + x = float(self.table.item(row, 0).text()) + y = float(self.table.item(row, 1).text()) + x_list.append(x) + y_list.append(y) + except Exception: + continue + return x_list, y_list + + def fit_and_plot(self): + self.data_x, self.data_y = self.get_manual_points() + try: + order = int(self.order_spin.value()) + except ValueError: + QMessageBox.warning(self, "输入错误", "阶数必须为整数!") + return + n_points = len(self.data_x) + if n_points < order + 1: + QMessageBox.warning(self, "数据不足", "数据点数量不足以拟合该阶多项式!") + return + x = np.array(self.data_x, dtype=np.float64) + y = np.array(self.data_y, dtype=np.float64) + x_min, x_max = x.min(), x.max() + if x_max - x_min == 0: + QMessageBox.warning(self, "数据错误", "所有x值都相同,无法拟合!") + return + try: + coeffs = np.polyfit(x, y, order) + except Exception as e: + QMessageBox.critical(self, "拟合错误", f"多项式拟合失败:{e}") + return + poly = np.poly1d(coeffs) + expr = "y = " + " + ".join([f"{c:.6g}*x^{order-i}" for i, c in enumerate(coeffs)]) + self.output.setPlainText(f"{expr}\n") + self.figure.clear() + ax = self.figure.add_subplot(111) + # ax.set_title("拟合结果", fontsize=22, fontweight='bold') + ax.set_xlabel("x", fontsize=18) + ax.set_ylabel("y", fontsize=18) + ax.scatter(x, y, color='red', label='Data') + x_fit = np.linspace(x_min, x_max, 200) + y_fit = poly(x_fit) + ax.plot(x_fit, y_fit, label='Fit Curve') + ax.legend() + self.canvas.draw() + self.last_coeffs = coeffs + self.last_xmin = x_min + self.last_xmax = x_max + + def generate_code(self): + if self.last_coeffs is None: + QMessageBox.warning(self, "未拟合", "请先拟合数据!") + return + coeffs = self.last_coeffs + code_type = self.code_type.currentText() + if code_type == "C": + code = self.create_c_function(coeffs) + elif code_type == "C++": + code = self.create_cpp_function(coeffs) + else: + code = self.create_py_function(coeffs) + self.output.setPlainText(code) + + def create_c_function(self, coeffs): + lines = ["#include ", "double polynomial(double x) {", " return "] + n = len(coeffs) + terms = [] + for i, c in enumerate(coeffs): + exp = n - i - 1 + if exp == 0: + terms.append(f"{c:.8g}") + elif exp == 1: + terms.append(f"{c:.8g}*x") + else: + terms.append(f"{c:.8g}*pow(x,{exp})") + lines[-1] += " + ".join(terms) + ";" + lines.append("}") + return "\n".join(lines) + + def create_cpp_function(self, coeffs): + lines = ["#include ", "double polynomial(double x) {", " return "] + n = len(coeffs) + terms = [] + for i, c in enumerate(coeffs): + exp = n - i - 1 + if exp == 0: + terms.append(f"{c:.8g}") + elif exp == 1: + terms.append(f"{c:.8g}*x") + else: + terms.append(f"{c:.8g}*pow(x,{exp})") + lines[-1] += " + ".join(terms) + ";" + lines.append("}") + return "\n".join(lines) + + def create_py_function(self, coeffs): + n = len(coeffs) + lines = ["def polynomial(x):", " return "] + terms = [] + for i, c in enumerate(coeffs): + exp = n - i - 1 + if exp == 0: + terms.append(f"{c:.8g}") + elif exp == 1: + terms.append(f"{c:.8g}*x") + else: + terms.append(f"{c:.8g}*x**{exp}") + lines[-1] += " + ".join(terms) + return "\n".join(lines) + +# --------- 功能二:下载 --------- +class DownloadPage(QWidget): + def __init__(self): + super().__init__() + self.setFont(QFont("微软雅黑", 15)) + self.setStyleSheet(""" + QWidget { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + border-radius: 18px; + border: 1px solid #d6eaf8; + } + """) + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(60, 60, 60, 60) + main_layout.setSpacing(32) + + # 标题 + title = QLabel("常用工具下载") + title.setFont(QFont("微软雅黑", 26, QFont.Bold)) + title.setAlignment(Qt.AlignCenter) + title.setStyleSheet("color: #2980b9; letter-spacing: 3px; margin-bottom: 10px;") + main_layout.addWidget(title) + + # 分割线 + line = QFrame() + line.setFrameShape(QFrame.HLine) + line.setFrameShadow(QFrame.Sunken) + line.setStyleSheet("color: #d6eaf8; background: #d6eaf8; min-height: 2px;") + main_layout.addWidget(line) + + # # 说明 + # desc = QLabel("点击下方按钮可直接跳转到常用工具或开发软件的官方下载页面:") + # desc.setFont(QFont("微软雅黑", 17)) + # desc.setAlignment(Qt.AlignCenter) + # desc.setStyleSheet("color: #34495e; margin-bottom: 18px;") + # main_layout.addWidget(desc) + + # 两大类布局 + from PyQt5.QtWidgets import QGridLayout, QGroupBox + + # 小工具类 + tools_tools = [ + ("Geek Uninstaller", "https://geekuninstaller.com/download", "🧹"), + ("Neat Download Manager", "https://www.neatdownloadmanager.com/index.php/en/", "⬇️"), + ("Everything", "https://www.voidtools.com/zh-cn/downloads/", "🔍"), + ("Bandizip", "https://www.bandisoft.com/bandizip/", "🗜️"), + ("PotPlayer", "https://potplayer.daum.net/", "🎬"), + ("Typora", "https://typora.io/", "📝"), + ("Git", "https://git-scm.com/download/win", "🟥"), + ("Python", "https://www.python.org/downloads/", "🐍"), + ] + tools_group = QGroupBox("常用小工具") + tools_group.setFont(QFont("微软雅黑", 14, QFont.Bold)) + tools_group.setStyleSheet(""" + QGroupBox { + border: 2px solid #b5d0ea; + border-radius: 12px; + margin-top: 16px; + background: #f8fbfd; + color: #2471a3; + padding: 10px 0 0 0; + } + QGroupBox:title { + subcontrol-origin: margin; + left: 18px; + top: -10px; + background: transparent; + padding: 0 8px; + } + """) + tools_layout = QGridLayout() + tools_layout.setSpacing(18) + tools_layout.setContentsMargins(24, 24, 24, 24) + for idx, (name, url, icon) in enumerate(tools_tools): + btn = QPushButton(f"{icon} {name}") + btn.setFont(QFont("微软雅黑", 16, QFont.Bold)) + btn.setMinimumHeight(60) + btn.setCursor(Qt.PointingHandCursor) + btn.setStyleSheet(""" + QPushButton { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + color: #2471a3; + border-radius: 14px; + font-size: 16px; + font-weight: 600; + padding: 8px 0; + border: 1.5px solid #d6eaf8; + letter-spacing: 1px; + } + QPushButton:hover { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #f8fffe, stop:1 #cfe7fa); + color: #1a6fae; + border: 2px solid #b5d0ea; + } + QPushButton:pressed { + background: #e3f0fa; + color: #2471a3; + border: 2px solid #a4cbe3; + } + """) + btn.clicked.connect(lambda checked, link=url: webbrowser.open(link)) + row, col = divmod(idx, 4) + tools_layout.addWidget(btn, row, col) + tools_group.setLayout(tools_layout) + main_layout.addWidget(tools_group) + + # 开发/设计软件类 + dev_tools = [ + ("STM32CubeMX", "https://www.st.com/zh/development-tools/stm32cubemx.html", "🟦"), + ("Keil MDK", "https://www.keil.com/download/product/", "🟩"), + ("Visual Studio Code", "https://code.visualstudio.com/", "🟦"), + ("CLion", "https://www.jetbrains.com/clion/download/", "🟧"), + ("MATLAB", "https://www.mathworks.com/downloads/", "🟨"), + ("SolidWorks", "https://www.solidworks.com/sw/support/downloads.htm", "🟫"), + ("Altium Designer", "https://www.altium.com/zh/altium-designer/downloads", "🟪"), + ("原神", "https://download-porter.hoyoverse.com/download-porter/2025/03/27/GenshinImpact_install_202503072011.exe?trace_key=GenshinImpact_install_ua_679d0b4e9b10", "🟫"), + ] + dev_group = QGroupBox("开发/设计软件") + dev_group.setFont(QFont("微软雅黑", 14, QFont.Bold)) + dev_group.setStyleSheet(""" + QGroupBox { + border: 2px solid #b5d0ea; + border-radius: 12px; + margin-top: 16px; + background: #f8fbfd; + color: #2471a3; + padding: 10px 0 0 0; + } + QGroupBox:title { + subcontrol-origin: margin; + left: 18px; + top: -10px; + background: transparent; + padding: 0 8px; + } + """) + dev_layout = QGridLayout() + dev_layout.setSpacing(18) + dev_layout.setContentsMargins(24, 24, 24, 24) + for idx, (name, url, icon) in enumerate(dev_tools): + btn = QPushButton(f"{icon} {name}") + btn.setFont(QFont("微软雅黑", 16, QFont.Bold)) + btn.setMinimumHeight(60) + btn.setCursor(Qt.PointingHandCursor) + btn.setStyleSheet(""" + QPushButton { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + color: #2471a3; + border-radius: 14px; + font-size: 16px; + font-weight: 600; + padding: 8px 0; + border: 1.5px solid #d6eaf8; + letter-spacing: 1px; + } + QPushButton:hover { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #f8fffe, stop:1 #cfe7fa); + color: #1a6fae; + border: 2px solid #b5d0ea; + } + QPushButton:pressed { + background: #e3f0fa; + color: #2471a3; + border: 2px solid #a4cbe3; + } + """) + btn.clicked.connect(lambda checked, link=url: webbrowser.open(link)) + row, col = divmod(idx, 4) + dev_layout.addWidget(btn, row, col) + dev_group.setLayout(dev_layout) + main_layout.addWidget(dev_group) + + main_layout.addStretch(1) + + # 页脚 + footer = QLabel("如有问题或建议,欢迎反馈至QQ群:857466609") + footer.setFont(QFont("微软雅黑", 13)) + footer.setAlignment(Qt.AlignCenter) + footer.setStyleSheet("color: #b2bec3; margin-top: 18px;") + main_layout.addWidget(footer) + +# --------- 功能三:串口助手 --------- +# class SerialAssistant(QWidget): + +# --------- 主工具箱UI --------- +class ToolboxUI(QWidget): + def __init__(self): + super().__init__() + self.setWindowTitle("MRobot 工具箱") + self.resize(1920, 1080) + self.setMinimumSize(900, 600) + self.setStyleSheet(""" + QWidget { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + border-radius: 16px; + } + """) + self.init_ui() + + def init_ui(self): + main_layout = QHBoxLayout(self) + main_layout.setContentsMargins(20, 20, 20, 20) + main_layout.setSpacing(20) + + # 左侧导航 + left_frame = QFrame() + left_frame.setFrameShape(QFrame.StyledPanel) + left_frame.setStyleSheet(""" + QFrame { + background: #f8fbfd; + border-radius: 14px; + border: 1px solid #d6eaf8; + } + """) + left_shadow = QGraphicsDropShadowEffect(self) + left_shadow.setBlurRadius(16) + left_shadow.setOffset(0, 4) + left_shadow.setColor(Qt.gray) + left_frame.setGraphicsEffect(left_shadow) + + left_layout = QVBoxLayout(left_frame) + left_layout.setSpacing(24) + left_layout.setContentsMargins(18, 18, 18, 18) + left_frame.setFixedWidth(260) + main_layout.addWidget(left_frame) + + # Logo + logo_label = QLabel() + logo_pixmap = QPixmap(resource_path("mr_tool_img/MRobot.png")) + if not logo_pixmap.isNull(): + logo_label.setPixmap(logo_pixmap.scaled(180, 80, Qt.KeepAspectRatio, Qt.SmoothTransformation)) + else: + logo_label.setText("MRobot") + logo_label.setAlignment(Qt.AlignCenter) + logo_label.setFont(QFont("Arial", 36, QFont.Bold)) + logo_label.setStyleSheet("color: #3498db;") + logo_label.setFixedHeight(120) + left_layout.addWidget(logo_label) + + # 按钮区 + self.button_names = ["主页", "曲线拟合", "功能三", "软件指南"] + self.buttons = [] + for idx, name in enumerate(self.button_names): + btn = QPushButton(name) + btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) + btn.setMinimumHeight(48) + btn.setStyleSheet(""" + QPushButton { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #eaf6fb, stop:1 #d6eaf8); + color: #2980b9; + border-radius: 20px; + font-size: 22px; + font-weight: 600; + padding: 14px 0; + border: 1px solid #d6eaf8; + letter-spacing: 2px; + } + QPushButton:hover { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, + stop:0 #f8fffe, stop:1 #cfe7fa); + color: #1a6fae; + border: 1.5px solid #b5d0ea; + } + QPushButton:pressed { + background: #e3f0fa; + color: #2471a3; + border: 1.5px solid #a4cbe3; + } + """) + btn.clicked.connect(lambda checked, i=idx: self.switch_function(i)) + self.buttons.append(btn) + left_layout.addWidget(btn) + + left_layout.addStretch(1) + + # 文本输出框 + self.output_box = QTextEdit() + self.output_box.setReadOnly(True) + self.output_box.setFixedHeight(180) + self.output_box.setStyleSheet(""" + QTextEdit { + background: #f4f6f7; + border-radius: 8px; + border: 1px solid #d6eaf8; + font-size: 16px; + color: #2c3e50; + padding: 10px; + } + """) + left_layout.addWidget(self.output_box) + + # 右侧功能区 + self.stack = QStackedWidget() + self.stack.setStyleSheet(""" + QStackedWidget { + background: #fff; + border-radius: 16px; + border: 1px solid #d6eaf8; + } + """) + right_shadow = QGraphicsDropShadowEffect(self) + right_shadow.setBlurRadius(24) + right_shadow.setOffset(0, 4) + right_shadow.setColor(Qt.gray) + self.stack.setGraphicsEffect(right_shadow) + + # 功能页面注册(后续扩展只需在这里添加页面类即可) + self.page_widgets = { + 0: HomePage(), # 主页 + 1: PolyFitApp(), # 多项式拟合 + 2: self.placeholder_page("功能三开发中..."), + 3: DownloadPage(), # 下载页面 + } + for i in range(len(self.button_names)): + self.stack.addWidget(self.page_widgets[i]) + main_layout.addWidget(self.stack) + + self.output_box.append("欢迎使用 MRobot 工具箱!请选择左侧功能。") + + def placeholder_page(self, text): + page = QWidget() + layout = QVBoxLayout(page) + label = QLabel(text) + label.setAlignment(Qt.AlignCenter) + label.setFont(QFont("微软雅黑", 22, QFont.Bold)) + label.setStyleSheet("color: #2980b9;") + layout.addStretch(1) + layout.addWidget(label) + layout.addStretch(1) + return page + + def switch_function(self, idx): + self.stack.setCurrentIndex(idx) + self.output_box.append(f"已切换到功能:{self.button_names[idx]}") + +if __name__ == "__main__": + app = QApplication(sys.argv) + win = ToolboxUI() + win.show() + sys.exit(app.exec_()) \ No newline at end of file diff --git a/MR_Toolbox.py b/MR_Toolbox.py deleted file mode 100644 index eedcc6c..0000000 --- a/MR_Toolbox.py +++ /dev/null @@ -1,92 +0,0 @@ -import sys -from PyQt5.QtWidgets import ( - QApplication, QWidget, QLabel, QPushButton, QTextEdit, QVBoxLayout, - QHBoxLayout, QStackedWidget, QSizePolicy, QFrame -) -from PyQt5.QtGui import QPixmap, QFont -from PyQt5.QtCore import Qt - -class ToolboxUI(QWidget): - def __init__(self): - super().__init__() - self.setWindowTitle("MRobot 工具箱") - self.setMinimumSize(900, 600) - self.init_ui() - - def init_ui(self): - # 主布局 - main_layout = QHBoxLayout(self) - main_layout.setContentsMargins(10, 10, 10, 10) - main_layout.setSpacing(10) - - # 左半区 - left_frame = QFrame() - left_frame.setFrameShape(QFrame.StyledPanel) - left_layout = QVBoxLayout(left_frame) - left_layout.setSpacing(20) - - # Logo - logo_label = QLabel() - logo_pixmap = QPixmap(180, 80) - logo_pixmap.fill(Qt.transparent) - logo_label.setPixmap(logo_pixmap) - logo_label.setText("MRobot") - logo_label.setAlignment(Qt.AlignCenter) - logo_label.setFont(QFont("Arial", 28, QFont.Bold)) - logo_label.setStyleSheet("color: #3498db;") - logo_label.setFixedHeight(100) - left_layout.addWidget(logo_label) - - # 按钮区 - self.buttons = [] - button_names = ["功能一", "功能二", "功能三", "功能四"] - for idx, name in enumerate(button_names): - btn = QPushButton(name) - btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) - btn.setMinimumHeight(40) - btn.setStyleSheet(""" - QPushButton { - background-color: #2980b9; color: white; - border-radius: 8px; font-size: 16px; - } - QPushButton:hover { - background-color: #3498db; - } - """) - btn.clicked.connect(lambda checked, i=idx: self.switch_function(i)) - self.buttons.append(btn) - left_layout.addWidget(btn) - - left_layout.addStretch(1) - - # 文本输出框 - self.output_box = QTextEdit() - self.output_box.setReadOnly(True) - self.output_box.setFixedHeight(80) - self.output_box.setStyleSheet("background: #f4f6f7; border-radius: 6px;") - left_layout.addWidget(self.output_box) - - left_frame.setMaximumWidth(240) - main_layout.addWidget(left_frame) - - # 右半区 - self.stack = QStackedWidget() - for i in range(len(button_names)): - page = QLabel(f"这里是 {button_names[i]} 的功能界面") - page.setAlignment(Qt.AlignCenter) - page.setFont(QFont("微软雅黑", 20)) - self.stack.addWidget(page) - main_layout.addWidget(self.stack) - - # 默认输出 - self.output_box.append("欢迎使用 MRobot 工具箱!请选择左侧功能。") - - def switch_function(self, idx): - self.stack.setCurrentIndex(idx) - self.output_box.append(f"已切换到功能:{self.buttons[idx].text()}") - -if __name__ == "__main__": - app = QApplication(sys.argv) - win = ToolboxUI() - win.show() - sys.exit(app.exec_()) \ No newline at end of file diff --git a/README.md b/README.md index 4e56952..c68ad7b 100644 --- a/README.md +++ b/README.md @@ -87,4 +87,5 @@ 使用以下命令构建可执行文件: ```bash -pyinstaller --onefile --windowed \ No newline at end of file +pyinstaller --onefile --windowed +pyinstaller MR_Toolbox.py --onefile --noconsole --icon=img\M.ico --add-data "mr_tool_img\MRobot.png;mr_tool_img" \ No newline at end of file diff --git a/data.xlsx b/data.xlsx deleted file mode 100644 index 391c07e79485d872a750c257abef71093433300b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8674 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 F`#&A$`)$gbn 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 Unn0+{ivfH<&vjM5DBD2)7tM9q4FCWD literal 0 HcmV?d00001 diff --git a/pitch.png b/pitch.png deleted file mode 100644 index e15ce17a495d28ea14beeb85b6dd81393a84fb7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23534 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 E2~&-Gf&c&j diff --git a/polynomial.py b/polynomial.py index c0b6805..f7057eb 100644 --- a/polynomial.py +++ b/polynomial.py @@ -1,205 +1,216 @@ -import tkinter as tk -from tkinter import filedialog, messagebox, ttk +import sys import numpy as np import pandas as pd -from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg +from PyQt5.QtWidgets import ( + QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QSpinBox, + QLabel, QTableWidget, QTableWidgetItem, QFileDialog, QTextEdit, + QComboBox, QMessageBox, QHeaderView +) +from PyQt5.QtGui import QFont +from PyQt5.QtCore import Qt +import matplotlib +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure -class PolyFitApp: - def __init__(self, root): - self.root = root - self.root.title("多项式拟合工具") +class PolyFitApp(QWidget): + def __init__(self): + super().__init__() + self.setWindowTitle("MRobot 多项式拟合工具") + self.resize(1440, 1280) + self.setFont(QFont("微软雅黑", 11)) + self.center() + self.data_x = [] self.data_y = [] self.last_coeffs = None + self.last_xmin = None + self.last_xmax = None - # ===== 主布局 ===== - main_frame = ttk.Frame(root, padding=8) - main_frame.pack(fill="both", expand=True) - main_frame.columnconfigure(0, weight=0) - main_frame.columnconfigure(1, weight=1) - main_frame.rowconfigure(0, weight=1) + # 主布局 + main_layout = QHBoxLayout(self) + main_layout.setContentsMargins(20, 20, 20, 20) + main_layout.setSpacing(20) + left_layout = QVBoxLayout() + left_layout.setSpacing(12) + right_layout = QVBoxLayout() + right_layout.setSpacing(12) + main_layout.addLayout(left_layout, 0) + main_layout.addLayout(right_layout, 1) - # ===== 左侧区 ===== - left_frame = ttk.Frame(main_frame, width=320, height=580) # 设置固定宽度 - left_frame.grid(row=0, column=0, sticky="nsw") # 只贴左侧 - left_frame.columnconfigure(0, weight=1) - left_frame.grid_propagate(False) # 防止自动缩放 + # 数据输入区 + self.table = QTableWidget(0, 2) + self.table.setFont(QFont("Consolas", 11)) + self.table.setHorizontalHeaderLabels(["x", "y"]) + self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + self.table.setSelectionBehavior(QTableWidget.SelectRows) + left_layout.addWidget(self.table) - # --- 数据输入区 --- - input_frame = ttk.LabelFrame(left_frame, text="数据输入", padding=6) - input_frame.grid(row=0, column=0, sticky="ew", pady=(0, 8)) - input_frame.columnconfigure(0, weight=1) + btn_row = QHBoxLayout() + self.add_row_btn = QPushButton("添加数据") + self.add_row_btn.setStyleSheet("color: #333;") + self.add_row_btn.clicked.connect(self.add_point_row) + btn_row.addWidget(self.add_row_btn) - self.excel_btn = ttk.Button(input_frame, text="导入excel文件", command=self.load_excel) - self.excel_btn.grid(row=0, column=0, sticky="ew", padx=2, pady=2) + self.del_row_btn = QPushButton("删除选中行") + self.del_row_btn.setStyleSheet("color: #333;") + self.del_row_btn.clicked.connect(self.delete_selected_rows) + btn_row.addWidget(self.del_row_btn) + left_layout.addLayout(btn_row) - # 滚动区域 - self.scroll_canvas = tk.Canvas(input_frame, height=200) - self.scroll_canvas.grid(row=1, column=0, sticky="ew", pady=4) - self.scrollbar = ttk.Scrollbar(input_frame, orient="vertical", command=self.scroll_canvas.yview) - self.scrollbar.grid(row=1, column=1, sticky="ns") - self.scroll_canvas.configure(yscrollcommand=self.scrollbar.set) + # 导入导出按钮区 + file_btn_row = QHBoxLayout() + self.import_btn = QPushButton("导入Excel文件") + self.import_btn.setStyleSheet("font-weight: bold; color: #333;") + self.import_btn.clicked.connect(self.load_excel) + file_btn_row.addWidget(self.import_btn) - self.manual_frame = ttk.Frame(self.scroll_canvas) - self.manual_frame.bind("", lambda e: self.scroll_canvas.configure(scrollregion=self.scroll_canvas.bbox("all"))) - self.scroll_canvas.create_window((0, 0), window=self.manual_frame, anchor="nw") + self.export_btn = QPushButton("导出Excel文件") + self.export_btn.setStyleSheet("font-weight: bold; color: #333;") + self.export_btn.clicked.connect(self.export_excel_and_plot) + file_btn_row.addWidget(self.export_btn) + left_layout.addLayout(file_btn_row) - self.point_rows = [] - self.add_row_btn = ttk.Button(input_frame, text="添加数据", command=self.add_point_row) - self.add_row_btn.grid(row=2, column=0, sticky="ew", padx=2, pady=2) + # 拟合参数区 + param_layout = QHBoxLayout() + param_layout.addWidget(QLabel("多项式阶数:")) + self.order_spin = QSpinBox() + self.order_spin.setRange(1, 10) + self.order_spin.setValue(2) + param_layout.addWidget(self.order_spin) + left_layout.addLayout(param_layout) - # --- 参数区 --- - param_frame = ttk.LabelFrame(left_frame, text="拟合参数", padding=6) - param_frame.grid(row=1, column=0, sticky="ew", pady=(0, 8)) - ttk.Label(param_frame, text="选择多项式阶数:").grid(row=0, column=0, padx=2, pady=2, sticky="e") - self.order_spin = ttk.Spinbox(param_frame, from_=1, to=10, width=5) - self.order_spin.set(2) - self.order_spin.grid(row=0, column=1, padx=2, pady=2, sticky="w") - # 优化复选框和拟合按钮同一行 - self.fit_btn = ttk.Button(param_frame, text="拟合并显示", command=self.fit_and_plot) - self.fit_btn.grid(row=1, column=0, padx=2, pady=4, sticky="ew") - self.optimize_var = tk.BooleanVar(value=True) - self.optimize_check = ttk.Checkbutton(param_frame, text="优化曲线(防止突起)", variable=self.optimize_var) - self.optimize_check.grid(row=1, column=1, padx=2, pady=4, sticky="w") + self.fit_btn = QPushButton("拟合并显示") + self.fit_btn.setStyleSheet("font-weight: bold; color: #333;") + self.fit_btn.clicked.connect(self.fit_and_plot) + left_layout.addWidget(self.fit_btn) - # --- 输出区 --- - output_frame = ttk.LabelFrame(left_frame, text="表达式与代码", padding=6) - output_frame.grid(row=2, column=0, sticky="ew") - self.output = tk.Text(output_frame, height=6, width=40, font=("Consolas", 10)) - self.output.grid(row=0, column=0, columnspan=3, padx=2, pady=2) - ttk.Label(output_frame, text="输出代码格式:").grid(row=1, column=0, padx=2, pady=2, sticky="e") - self.code_type = ttk.Combobox(output_frame, values=["C", "C++", "Python"], width=8) - self.code_type.set("C") - self.code_type.grid(row=1, column=1, padx=2, pady=2, sticky="w") - self.gen_code_btn = ttk.Button(output_frame, text="生成函数代码", command=self.generate_code) - self.gen_code_btn.grid(row=1, column=2, padx=2, pady=2, sticky="ew") + # 输出区 + self.output = QTextEdit() + self.output.setReadOnly(False) + self.output.setFont(QFont("Consolas", 10)) + self.output.setMaximumHeight(150) + left_layout.addWidget(self.output) - # ===== 右侧区 ===== - right_frame = ttk.Frame(main_frame) - # right_frame.grid(row=0, column=1, sticky="nsew") # 填满剩余空间 - right_frame.grid(row=0, column=1, sticky="nsew", padx=(8, 0)) - right_frame.rowconfigure(0, weight=1) - right_frame.columnconfigure(0, weight=1) + code_layout = QHBoxLayout() + code_layout.addWidget(QLabel("输出代码格式:")) + self.code_type = QComboBox() + self.code_type.addItems(["C", "C++", "Python"]) + code_layout.addWidget(self.code_type) + self.gen_code_btn = QPushButton("生成函数代码") + self.gen_code_btn.setStyleSheet("color: #333;") + self.gen_code_btn.clicked.connect(self.generate_code) + code_layout.addWidget(self.gen_code_btn) + left_layout.addLayout(code_layout) - plot_frame = ttk.LabelFrame(right_frame, text="拟合曲线", padding=6) - plot_frame.grid(row=0, column=0, sticky="nsew") - plot_frame.rowconfigure(0, weight=1) - plot_frame.columnconfigure(0, weight=1) + # 拟合曲线区 self.figure = Figure(figsize=(5, 4)) - self.canvas = FigureCanvasTkAgg(self.figure, master=plot_frame) - self.canvas.get_tk_widget().pack(fill="both", expand=True) - self.scroll_canvas.bind_all("", self._on_mousewheel) + self.canvas = FigureCanvas(self.figure) + right_layout.addWidget(self.canvas) - - def _on_mousewheel(self, event): - # Windows下event.delta为120的倍数,负值向下 - self.scroll_canvas.yview_scroll(int(-1*(event.delta/120)), "units") + def center(self): + qr = self.frameGeometry() + cp = QApplication.desktop().availableGeometry().center() + qr.moveCenter(cp) + self.move(qr.topLeft()) def add_point_row(self, x_val="", y_val=""): - row = {} - idx = len(self.point_rows) - row['x'] = ttk.Entry(self.manual_frame, width=10) - row['x'].insert(0, str(x_val)) - row['y'] = ttk.Entry(self.manual_frame, width=10) - row['y'].insert(0, str(y_val)) - row['del'] = ttk.Button(self.manual_frame, text="删除", width=5, command=lambda r=idx: self.delete_point_row(r)) - row['x'].grid(row=idx, column=0, padx=1, pady=1) - row['y'].grid(row=idx, column=1, padx=1, pady=1) - row['del'].grid(row=idx, column=2, padx=1, pady=1) - self.point_rows.append(row) - self.refresh_point_rows() + row = self.table.rowCount() + self.table.insertRow(row) + self.table.setItem(row, 0, QTableWidgetItem(str(x_val))) + self.table.setItem(row, 1, QTableWidgetItem(str(y_val))) - def delete_point_row(self, idx): - for widget in self.point_rows[idx].values(): - widget.grid_forget() - widget.destroy() - self.point_rows.pop(idx) - self.refresh_point_rows() - - def refresh_point_rows(self): - for i, row in enumerate(self.point_rows): - row['x'].grid(row=i, column=0, padx=1, pady=1) - row['y'].grid(row=i, column=1, padx=1, pady=1) - row['del'].config(command=lambda r=i: self.delete_point_row(r)) - row['del'].grid(row=i, column=2, padx=1, pady=1) + def delete_selected_rows(self): + selected = self.table.selectionModel().selectedRows() + for idx in sorted(selected, reverse=True): + self.table.removeRow(idx.row()) def load_excel(self): - file = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx *.xls")]) + file, _ = QFileDialog.getOpenFileName(self, "选择Excel文件", "", "Excel Files (*.xlsx *.xls)") if file: try: data = pd.read_excel(file, usecols=[0, 1]) new_x = data.iloc[:, 0].values.tolist() new_y = data.iloc[:, 1].values.tolist() - messagebox.showinfo("成功", "数据导入成功!") for x, y in zip(new_x, new_y): self.add_point_row(x, y) + QMessageBox.information(self, "成功", "数据导入成功!") except Exception as e: - messagebox.showerror("错误", f"读取Excel失败: {e}") + QMessageBox.critical(self, "错误", f"读取Excel失败: {e}") + + def export_excel_and_plot(self): + file, _ = QFileDialog.getSaveFileName(self, "导出Excel文件", "", "Excel Files (*.xlsx *.xls)") + if file: + x_list, y_list = [], [] + for row in range(self.table.rowCount()): + try: + x = float(self.table.item(row, 0).text()) + y = float(self.table.item(row, 1).text()) + x_list.append(x) + y_list.append(y) + except Exception: + continue + if not x_list or not y_list: + QMessageBox.warning(self, "导出失败", "没有可导出的数据!") + return + df = pd.DataFrame({'x': x_list, 'y': y_list}) + try: + df.to_excel(file, index=False) + # 导出同名png图像 + png_file = file + if png_file.lower().endswith('.xlsx') or png_file.lower().endswith('.xls'): + png_file = png_file.rsplit('.', 1)[0] + '.png' + else: + png_file = png_file + '.png' + self.figure.savefig(png_file, dpi=150, bbox_inches='tight') + QMessageBox.information(self, "导出成功", f"数据已成功导出到Excel文件!\n图像已导出为:{png_file}") + except Exception as e: + QMessageBox.critical(self, "导出错误", f"导出Excel或图像失败: {e}") def get_manual_points(self): x_list, y_list = [], [] - for row in self.point_rows: + for row in range(self.table.rowCount()): try: - x = float(row['x'].get()) - y = float(row['y'].get()) + x = float(self.table.item(row, 0).text()) + y = float(self.table.item(row, 1).text()) x_list.append(x) y_list.append(y) - except ValueError: + except Exception: continue return x_list, y_list - def fit_and_plot(self): - # 始终以手动输入区为准 + matplotlib.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei'] + matplotlib.rcParams['axes.unicode_minus'] = False + matplotlib.rcParams['font.size'] = 14 self.data_x, self.data_y = self.get_manual_points() try: - order = int(self.order_spin.get()) + order = int(self.order_spin.value()) except ValueError: - messagebox.showwarning("输入错误", "阶数必须为整数!") + QMessageBox.warning(self, "输入错误", "阶数必须为整数!") return n_points = len(self.data_x) if n_points < order + 1: - messagebox.showwarning("数据不足", "数据点数量不足以拟合该阶多项式!") + QMessageBox.warning(self, "数据不足", "数据点数量不足以拟合该阶多项式!") return - - # 阶数过高判断,只提示不强制修改 - max_order = max(2, min(6, n_points // 3)) - if order > max_order: - messagebox.showwarning("阶数过高", f"当前数据点数为{n_points},建议阶数不超过{max_order},否则容易出现异常突起!") - x = np.array(self.data_x, dtype=np.float64) y = np.array(self.data_y, dtype=np.float64) - - # ----------- 新增归一化 ----------- x_min, x_max = x.min(), x.max() if x_max - x_min == 0: - messagebox.showwarning("数据错误", "所有x值都相同,无法拟合!") + QMessageBox.warning(self, "数据错误", "所有x值都相同,无法拟合!") return - x_norm = (x - x_min) / (x_max - x_min) - # --------------------------------- - try: - if self.optimize_var.get(): - # 优化:加大rcond,减少高阶影响 - coeffs = np.polyfit(x_norm, y, order, rcond=1e-3) - else: - coeffs = np.polyfit(x_norm, y, order) + coeffs = np.polyfit(x, y, order) except Exception as e: - messagebox.showerror("拟合错误", f"多项式拟合失败:{e}") + QMessageBox.critical(self, "拟合错误", f"多项式拟合失败:{e}") return poly = np.poly1d(coeffs) - expr = "y = " + " + ".join([f"{c:.6g}*x_norm^{order-i}" for i, c in enumerate(coeffs)]) - self.output.delete(1.0, tk.END) - self.output.insert(tk.END, f"归一化x: x_norm=(x-{x_min:.6g})/({x_max:.6g}-{x_min:.6g})\n") - self.output.insert(tk.END, expr + "\n") - # 绘图 + expr = "y = " + " + ".join([f"{c:.6g}*x^{order-i}" for i, c in enumerate(coeffs)]) + self.output.setPlainText(f"{expr}\n") self.figure.clear() ax = self.figure.add_subplot(111) ax.scatter(x, y, color='red', label='数据点') x_fit = np.linspace(x_min, x_max, 200) - x_fit_norm = (x_fit - x_min) / (x_max - x_min) - y_fit = poly(x_fit_norm) + y_fit = poly(x_fit) ax.plot(x_fit, y_fit, label='拟合曲线') ax.legend() self.canvas.draw() @@ -209,19 +220,17 @@ class PolyFitApp: def generate_code(self): if self.last_coeffs is None: - messagebox.showwarning("未拟合", "请先拟合数据!") + QMessageBox.warning(self, "未拟合", "请先拟合数据!") return coeffs = self.last_coeffs - order = len(coeffs) - 1 - code_type = self.code_type.get() + code_type = self.code_type.currentText() if code_type == "C": code = self.create_c_function(coeffs) elif code_type == "C++": code = self.create_cpp_function(coeffs) else: code = self.create_py_function(coeffs) - self.output.delete(1.0, tk.END) - self.output.insert(tk.END, code) + self.output.setPlainText(code) def create_c_function(self, coeffs): lines = ["#include ", "double polynomial(double x) {", " return "] @@ -271,6 +280,7 @@ class PolyFitApp: return "\n".join(lines) if __name__ == "__main__": - root = tk.Tk() - app = PolyFitApp(root) - root.mainloop() \ No newline at end of file + app = QApplication(sys.argv) + win = PolyFitApp() + win.show() + sys.exit(app.exec_()) \ No newline at end of file