续写之前的Pyqt教学:基于PyQT的工业软件界面制作保姆级教程 | 环境搭建,本次主要分享以下内容:
最后我们的软件界面上呈现这样的形式:
qt的界面设计功能很多,像我们经常使用的网易云音乐播放器就是用pt做出来的,我们这个系列的教学主要针工业软件研发领域,聚焦于有限元前后处理显示,读者可以在此基础上进行升级扩展。
pyvista库是非常优秀的后处理渲染库,对于pyvista库的介绍,前面有非常详细的推文介绍,感兴趣的读者可翻阅往期干货推文:VTK库学习 | 百万级自由度有限元模型云图绘制只需0.02秒!。
我们现在想的是如何让pyvista渲染后的图内嵌入软件中?pyvista提供了非常友好的pyqt5接口:pyvistaqt
,用户导入将其导入后即可将pyvista嵌入进qt中。
具体使用方法:
from pyvistaqt import QtInteractor
-------
self.frame = self.ui.pyvistaFrame
self.plotter = QtInteractor(self.frame)
self.ui.verticalLayout.addWidget(self.plotter.interactor)
pyvistaFrame
和verticalLayout
的来源:
用户绘图时直接self.plotter.add_mesh
即可。
pygmsh是著名开源网格划分程序—Gmsh的Python接口,github地址为:https://github.com/nschloe/pygmsh,相关具体介绍可百度。本小节使用pygmsh画一个最基础的圆形几何区域,然后进行三角形网格划分:
# 圆心
fixPoints = np.array([
[0.0, 0.0, 0.0]
])
# 调用pygmsh
with pygmsh.geo.Geometry() as geom:
geom.add_circle(
fixPoints[0],# 圆心
radius=1.0,# 半径
mesh_size=0.2,# 网格密度
)
self.geom = geom
# 网格生成
mesh = self.geom.generate_mesh()
以上代码片进行了详细注释,不多做解释。
结合pyvista进行渲染显示:
darg = dict(
show_edges=True,
line_width=1,
color='#a3c2c3',
style='surface', # wireframe
)
self.plotter.add_mesh(meshio_mesh, **darg)
运行程序后的结果就是本文开头的效果图:
有时在qt designer中设计好的界面位置,但是每次在IDE中运行后,窗口位置就奇奇怪怪,不是在屏幕最中间,如何让运行后的窗口位置在最中间看着更加舒服呢?
def center(self): # 定义一个函数使得窗口居中显示
# 获取屏幕坐标系
screen = QDesktopWidget().screenGeometry()
# 获取窗口坐标系
size = self.geometry()
newLeft = (screen.width() - size.width()) / 2.0
newTop = (screen.height() - size.height()) / 4.5
self.move(int(newLeft), int(newTop))
添加以上的函数,用户在使用过程中,直接复 制就行,初始化时调用该函数即可:self.center()
本次的分享就结束啦,主要带着大家使用pygmsh生成网格,然后嵌入在qt界面中,文字性介绍可能会有点抽象,这两天会录制会录制本期推文的视频,更加形象的分享,第一时间将发布在B站中,欢迎持续关注!
下次计划分享:
本次的教学代码存放在知识星球中,感兴趣的小伙伴可在后台回复:星球
,即可加入,对代码的任何疑问欢迎在星球中进行提问。