PyQt5开发笔记:2. 2D与3D散点图、水平布局和边框修饰

一、装pyqtgraph和PyOpenGL库

bash 复制代码
pip install pyqtgraph
pip install PyOpenGL

注意:一定不要pip install OpenGL,否则会找不到

二、3D散点图效果

python 复制代码
import pyqtgraph as pg
import pyqtgraph.opengl as gl
import numpy as np

# 创建应用程序
app = pg.mkQApp("3D Scatter Plot")

# 创建图形窗口
w = gl.GLViewWidget()
w.show()
w.setWindowTitle('pyqtgraph 3D Scatter Plot')
w.setCameraPosition(distance=40)

# 创建3D散点图数据
g = gl.GLGridItem()
w.addItem(g)

pos = np.random.normal(size=(1000, 3))
scatter = gl.GLScatterPlotItem(pos=pos, color=(1, 1, 1, 1), size=5)
w.addItem(scatter)

# 运行应用程序
pg.exec()

Pyqtgraph,一个神奇的python库 (qq.com)

三、水平布局

使用 QSplitter 来管理两个窗口的布局,这样可以确保它们并排显示并且可以调整大小;使用传统的QHBoxLayout容易出问题

python 复制代码
import pyqtgraph as pg
import pyqtgraph.opengl as gl
from pyqtgraph.Qt import QtCore, QtWidgets
import numpy as np

# 创建应用程序
app = QtWidgets.QApplication([])

# 创建主窗口
main_window = QtWidgets.QMainWindow()
main_window.setWindowTitle('Combined 3D and 2D Scatter Plot')
main_window.resize(1200, 600)

# 创建一个中心部件
central_widget = QtWidgets.QWidget()
main_window.setCentralWidget(central_widget)

# 创建水平布局
hbox = QtWidgets.QHBoxLayout(central_widget)

# 创建QSplitter来并排显示两个窗口
splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)

# 创建3D散点图窗口
w = gl.GLViewWidget()
w.setWindowTitle('pyqtgraph 3D Scatter Plot')
w.setCameraPosition(distance=40)

# 创建3D散点图数据
g = gl.GLGridItem()
w.addItem(g)

pos = np.random.normal(size=(1000, 3))
scatter = gl.GLScatterPlotItem(pos=pos, color=(1, 1, 1, 1), size=5)
w.addItem(scatter)

# 创建2D散点图窗口
win = pg.GraphicsLayoutWidget()
win.setWindowTitle("Interactive Scatter Plot")

# 创建一个绘图窗口
plot = win.addPlot(title="Interactive Scatter Plot")
x = np.random.normal(size=1000)
y = np.random.normal(size=1000)
plot.plot(x, y, pen=None, symbol='o')

# 将两个窗口添加到QSplitter中
splitter.addWidget(w)
splitter.addWidget(win)

# 将QSplitter添加到水平布局中
hbox.addWidget(splitter)

# 显示主窗口
main_window.show()

# 运行应用程序
app.exec_()

四、模块化代码并修饰边框

将两块区域分别放在不同的py文件里,然后定义一个main.py,并且稍微修饰一下边框,代码如下

python 复制代码
# main.py
from PyQt5 import QtCore, QtWidgets
from Scatter3D_plot import create_3d_scatter_plot
from Scatter2D_plot import create_2d_scatter_plot

# 创建应用程序
app = QtWidgets.QApplication([])

# 创建主窗口
main_window = QtWidgets.QMainWindow()
main_window.setWindowTitle('Combined 3D and 2D Scatter Plot')
main_window.resize(1200, 600)

# 设置样式表来修改边框样式
main_window.setStyleSheet("""
    QMainWindow {
        background-color: white;  /* 设置背景颜色 */
        border: 2px solid #3498db;  /* 设置边框样式 */
        border-radius: 10px;        /* 设置边框圆角 */
        padding: 10px;              /* 设置内边距 */
    }
""")

# 创建一个中心部件
central_widget = QtWidgets.QWidget()
main_window.setCentralWidget(central_widget)

# 创建水平布局
hbox = QtWidgets.QHBoxLayout(central_widget)

# 创建QSplitter来并排显示两个窗口
splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)

# 创建3D散点图窗口
w = create_3d_scatter_plot()

# 创建2D散点图窗口
win = create_2d_scatter_plot()

# 将两个窗口添加到QSplitter中
splitter.addWidget(w)
splitter.addWidget(win)

# 将QSplitter添加到水平布局中
hbox.addWidget(splitter)

# 显示主窗口
main_window.show()

# 运行应用程序
app.exec_()
相关推荐
wp123_15 小时前
硬件元器件笔记|IPX8 防水 Type‑C 母座安费诺 124018802112A 与 TONEVEE TY48086‑24A 分析
c语言·开发语言·笔记
mifengxing6 小时前
操作系统 文件系统
笔记·操作系统·计算机408
无聊的菜鸟7 小时前
TMS320F2806X学习笔记(零)—— C2000、CCS、新建工程
笔记·mcu·c2000·f2806x
ljt27249606618 小时前
Compose笔记(八十三)--onVisibilityChanged
笔记
Fa_Mian_Tuan12 小时前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论
zhangrelay13 小时前
ROS 2 Lyrical 第9章 计算机视觉与摄像头应用
linux·笔记·学习·ubuntu·机器人·ros2
FakeOccupational13 小时前
【电路笔记 STM32】stm32f103 实现HAL_UART_Transmit_DMA + 普通模式/连续模式的 UART DMA 收发
笔记·stm32·嵌入式硬件
北京海得康14 小时前
DMD基因治疗deramiocel遭FDA质疑,Ultragenyx DTX401即将获批
笔记
zjnlswd15 小时前
C#学习笔记2 刘铁锰
笔记·学习
Mr_liu_66615 小时前
Claude非专业入门实战笔记(4):Claude运行方式简单解析——从RAG到代理循环
笔记·ai编程·claude