update 重新规划架构,绘制机械臂夹爪轨迹图
This commit is contained in:
101
ThreadTest.py
101
ThreadTest.py
@ -1,61 +1,64 @@
|
||||
from PySide6.QtWidgets import (
|
||||
QApplication, QWidget, QHBoxLayout, QVBoxLayout, QPushButton,
|
||||
QLineEdit, QLabel, QGroupBox, QSpacerItem, QSizePolicy
|
||||
)
|
||||
from PySide6.QtGui import QIcon
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
|
||||
from PySide6.QtDataVisualization import Q3DScatter, QScatter3DSeries, Q3DTheme,Q3DCamera,QScatterDataItem
|
||||
from PySide6.QtGui import QVector3D, Qt
|
||||
|
||||
class OptimizedUI(QWidget):
|
||||
import sys
|
||||
|
||||
class Scatter3DWindow(QMainWindow):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.setWindowTitle("3D 轨迹点图")
|
||||
|
||||
self.setWindowTitle("UI Optimization")
|
||||
self.setFixedSize(600, 150)
|
||||
self.init_ui()
|
||||
# 创建 3D Scatter 图
|
||||
self.graph = Q3DScatter()
|
||||
self.graph.activeTheme().setType(Q3DTheme.Theme.ThemeEbony) # 设置主题
|
||||
self.graph.scene().activeCamera().setCameraPreset(Q3DCamera.CameraPreset.CameraPresetFront) # 修正属性名
|
||||
|
||||
def init_ui(self):
|
||||
# 主布局
|
||||
main_layout = QHBoxLayout(self)
|
||||
main_layout.setSpacing(10)
|
||||
# 创建容器
|
||||
container = QWidget.createWindowContainer(self.graph)
|
||||
container.setMinimumSize(800, 600)
|
||||
|
||||
# 1. 坐标输入框组
|
||||
coord_group = QGroupBox("坐标")
|
||||
coord_layout = QVBoxLayout()
|
||||
for _ in range(2): # 两行坐标输入
|
||||
row_layout = QHBoxLayout()
|
||||
for label in ["x", "y", "z"]:
|
||||
row_layout.addWidget(QLineEdit(), 1)
|
||||
coord_layout.addLayout(row_layout)
|
||||
coord_group.setLayout(coord_layout)
|
||||
# 设置布局
|
||||
widget = QWidget()
|
||||
layout = QVBoxLayout(widget)
|
||||
layout.addWidget(container)
|
||||
self.setCentralWidget(widget)
|
||||
|
||||
# 2. 功能按钮组
|
||||
button_layout = QVBoxLayout()
|
||||
get_btn = QPushButton("获取位置")
|
||||
save_btn = QPushButton("保存位置")
|
||||
for btn in [get_btn, save_btn]:
|
||||
btn.setStyleSheet("background-color: #a8e6cf; border-radius: 5px;")
|
||||
button_layout.addWidget(btn)
|
||||
# 添加数据
|
||||
self.add_data()
|
||||
|
||||
# 3. 右侧操作按钮
|
||||
add_point_btn = QPushButton("添加中间点")
|
||||
add_point_btn.setIcon(QIcon.fromTheme("list-add"))
|
||||
add_point_btn.setStyleSheet("background-color: #61c0bf; border-radius: 5px; color: white;")
|
||||
dropdown_btn = QPushButton("▼")
|
||||
dropdown_btn.setFixedWidth(30)
|
||||
def add_data(self):
|
||||
# 创建轨迹点数据
|
||||
series = QScatter3DSeries()
|
||||
series.setItemSize(0.2) # 点的大小
|
||||
data = []
|
||||
data.append(QScatterDataItem(QVector3D(0.5, 0.5, 0.5)))
|
||||
data.append(QScatterDataItem(QVector3D(-0.3, -0.5, -0.4)))
|
||||
data.append(QScatterDataItem(QVector3D(0.0, -0.3, 0.2)))
|
||||
series.dataProxy().addItems(data)
|
||||
|
||||
right_layout = QHBoxLayout()
|
||||
right_layout.addWidget(add_point_btn)
|
||||
right_layout.addWidget(dropdown_btn)
|
||||
# 添加到图表
|
||||
self.graph.addSeries(series)
|
||||
|
||||
# 添加控件到主布局
|
||||
main_layout.addWidget(QPushButton("破碎点"), 1)
|
||||
main_layout.addWidget(coord_group, 3)
|
||||
main_layout.addLayout(button_layout, 2)
|
||||
main_layout.addLayout(right_layout, 2)
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
window = OptimizedUI()
|
||||
window.show()
|
||||
scatter = Q3DScatter()
|
||||
scatter.setFlags(scatter.flags())
|
||||
series = QScatter3DSeries()
|
||||
data = []
|
||||
data.append(QScatterDataItem(QVector3D(0.5, 0.5, 0.5)))
|
||||
data.append(QScatterDataItem(QVector3D(-0.3, -0.5, -0.4)))
|
||||
data.append(QScatterDataItem(QVector3D(0.0, -0.3, 0.2)))
|
||||
series.dataProxy().addItems(data)
|
||||
scatter.addSeries(series)
|
||||
|
||||
# 调整相机位置,更好的角度来观察散点
|
||||
camera = scatter.scene().activeCamera()
|
||||
camera.setCameraPreset(Q3DCamera.CameraPreset.CameraPresetFront)
|
||||
|
||||
scatter.setTitle('实战 Qt for Python: 3D散点图演示')
|
||||
scatter.resize(480, 360)
|
||||
scatter.show()
|
||||
|
||||
sys.exit(app.exec())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user