``` import os import warnings import json import sys import pandas as pd import numpy as np import tensorflow as tf from sklearn.preprocessing import MinMaxScaler from PyQt5 import QtCore, QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtGui import QFont from PyQt5.QtWidgets import ( QApplication, QMainWindow, QDialog, QWidget, QVBoxLayout, QHBoxLayout, QFormLayout, QLabel, QLineEdit, QPushButton, QComboBox, QMessageBox, QCheckBox ) from tensorflow.keras.layers import Dropout, Layer from datetime import datetime # 抑制弃用警告 warnings.filterwarnings("ignore", category=DeprecationWarning) os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0' # 自定义注意力层 class SelfAttentionLayer(Layer): def __init__(self, output_dim): super(SelfAttentionLayer, self).__init__() self.output_dim = output_dim self.W_q = tf.keras.layers.Dense(output_dim) self.W_k = tf.keras.layers.Dense(output_dim) self.W_v = tf.keras.layers.Dense(output_ ```帮我优化UI界面
时间: 2025-03-15 20:14:57 浏览: 54
<<
从代码片段来看,这是一个结合了TensorFlow深度学习模型和PyQt5 GUI框架的应用程序。目前的代码中包含了自定义注意力机制(Self-Attention)以及一些基础的数据处理工具包如`pandas`、`numpy`等。
关于优化UI界面部分,可以从以下几方面入手:
---
### 1. **提升布局美观度**
- 使用更高级的布局管理器(例如 `QGridLayout`),合理安排控件的位置。
- 添加更多的视觉元素(背景颜色、图标等),使界面更具吸引力。
- 设置字体大小和样式,增强可读性和用户体验。
#### 示例改进方法:
```python
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# 创建主窗口部件及布局
central_widget = QWidget()
layout = QVBoxLayout(central_widget)
self.setCentralWidget(central_widget)
# 标题标签设置大号字体
title_label = QLabel("数据预测系统")
font = QFont("Arial", 20, QFont.Bold)
title_label.setFont(font)
layout.addWidget(title_label, alignment=Qt.AlignCenter)
# 输入框区域
form_layout = QFormLayout()
self.input_field = QLineEdit()
form_layout.addRow("输入路径:", self.input_field)
layout.addLayout(form_layout)
# 提交按钮美化
submit_button = QPushButton("运行预测")
submit_button.setStyleSheet("""
QPushButton {
background-color: #4CAF50;
color: white;
padding: 8px 16px;
border-radius: 4px;
}
QPushButton:hover {
background-color: #45a049;
}
""")
layout.addWidget(submit_button, alignment=Qt.AlignCenter)
# 连接信号槽
submit_button.clicked.connect(self.run_prediction)
def run_prediction(self):
input_path = self.input_field.text().strip()
if not os.path.exists(input_path):
QMessageBox.critical(None, "错误", f"文件或目录不存在:{input_path}")
return
try:
# 在这里调用机器学习逻辑
print(f"正在加载数据集... {input_path}")
data = pd.read_csv(input_path) # 假设是CSV格式
print(data.head())
QMessageBox.information(None, "成功", "数据分析完成!")
except Exception as e:
QMessageBox.critical(None, "异常", str(e))
```
---
### 2. **增加功能模块化设计**
将不同功能分离成独立的小部件(widget)。比如可以创建多个子页面用于显示不同的内容(参数配置页、结果展示页等)。这样不仅便于扩展新功能,还能让界面更加清晰易懂。
#### 实现思路:
可以通过`QStackedWidget`实现多页面切换效果,每一页代表一种操作模式。
```python
class ParameterPage(QWidget): # 参数配置页面
def __init__(self):
super().__init__()
layout = QVBoxLayout()
label = QLabel("请选择训练参数:")
layout.addWidget(label)
combo_box = QComboBox()
combo_box.addItem("线性回归")
combo_box.addItem("神经网络")
layout.addWidget(combo_box)
self.setLayout(layout)
class ResultPage(QWidget): # 结果展示页面
def __init__(self):
super().__init__()
layout = QVBoxLayout()
table_view = QtWidgets.QTableView() # 显示表格数据
model = QtGui.QStandardItemModel(5, 3) # 初始为5行x3列空表
table_view.setModel(model)
layout.addWidget(table_view)
self.setLayout(layout)
class MainApp(QMainWindow):
def __init__(self):
super(MainApp, self).__init__()
stacked_widget = QtWidgets.QStackedWidget()
stacked_widget.addWidget(ParameterPage()) # 第一页
stacked_widget.addWidget(ResultPage()) # 第二页
button_next = QPushButton("下一页")
button_prev = QPushButton("上一页")
main_layout = QVBoxLayout()
control_layout = QHBoxLayout()
control_layout.addWidget(button_prev)
control_layout.addWidget(button_next)
container = QWidget()
container_layout = QVBoxLayout(container)
container_layout.addWidget(stacked_widget)
container_layout.addLayout(control_layout)
self.setCentralWidget(container)
current_page_index = 0
button_next.clicked.connect(lambda: stacked_widget.setCurrentIndex(current_page_index := (current_page_index + 1) % 2))
button_prev.clicked.connect(lambda: stacked_widget.setCurrentIndex((current_page_index - 1) % 2))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainApp()
window.show()
sys.exit(app.exec_())
```
---
### 3. **动态更新提示信息**
为了让用户知道当前进程状态,在界面上加入进度条或日志输出区是一个不错的选择。
示例添加一个文本框实时打印消息:
```python
log_text_edit = QTextEdit(readOnly=True)
layout.addWidget(log_text_edit)
def log_message(message):
timestamp = datetime.now().strftime("[%Y-%m-%d %H:%M:%S]")
formatted_msg = f"{timestamp} {message}\n"
log_text_edit.append(formatted_msg)
# 调用时传递信息给这个函数即可
log_message("开始执行任务...")
```
---
**总结**:
以上是从结构布局调整到交互体验改善的一系列改进建议。根据实际需求可以选择合适的方式逐步完善项目中的GUI部分。
---
阅读全文
相关推荐



















