数学建模社区-数学中国

标题: Python UI设计学习笔记,在学习的UI框架中嵌入其他ui组件:增加组件到主画面的pages中 [打印本页]

作者: 杨利霞    时间: 2022-9-15 12:28
标题: Python UI设计学习笔记,在学习的UI框架中嵌入其他ui组件:增加组件到主画面的pages中

& W. A$ P1 P2 n! oPython UI设计学习笔记,在学习的UI框架中嵌入其他ui组件:增加组件到主画面的pages中* u3 x6 q9 \' a, j0 \  ^0 P5 A; |

7 W- y# Q& C3 f. x9 t7 Q! x" _, A/ }1 u
文章目录# ~0 ^/ v- {, Z: K
在Pyside2中嵌入其他ui组件:增加组件到`pages`中,在`develop`分支中开发
* f. b8 C; [- L! ]8 U8 u" ^组件1:`jupyter qtconsole`
$ \' \' w5 G7 ^组件2:`matplotlib FigureCanvas for qtwidget`- |9 O- U* t# H( P3 B. B; R
组件3:`pyqtgraph`
+ X8 u; x; S" c  c3 G5 h) m在Pyside2中嵌入其他ui组件:增加组件到pages中,在develop分支中开发. `8 ^& w7 J) ]& U* m6 L
以下组件部分测试测试参考:* t3 w) q" _4 Q) r" o
$ X9 D7 w$ B1 c3 e
参考的B站视频% p0 `  {& u% E2 c4 v
qtconsole 官方文档:The Qt Console for Jupyter
$ E3 d* [* o) o% u- M1 a组件1:jupyter qtconsole' i. w5 ^1 A2 m! d
1、安装 qtconsole 库, 经测试发现,该库目前不支持 pyside6, 所以更改解释器环境到 pyqt5 or pyside2
2 D% t2 r2 ~2 m5 T0 @    pip install qtconsole -i  https://pypi.tuna.tsinghua.edu.cn/simple
& n! ]8 k6 i4 u( u0 D) M  q7 B18 L3 n- u6 U7 E& O/ c+ P
2、尝试启动
* p2 \! j( A; I; o   jupyter qtconsole2 r1 o6 A% V1 ?2 w9 D3 Y  A1 k2 u
1
4 @$ h* ^: \) y6 M  v8 p
' f8 |% C% r9 g8 J* |1 Z/ X3 I
7 v- }. h* W: A4 j3、尝试嵌入组件到pyside2 ui中/ d4 d/ e+ G0 J: f6 ]

; Y4 w) Z% Q) y; s: m3.1、复制参考的py代码 consolewidget.py 到 gui.widgets 文件目录下
+ S3 J+ A! P% T- o; K2 Z; i8 K  R, p
3.2、在Qt Designer 使用 Widget(基类/父类) promote to ConsoleWidget,并修改对象名称,操作如下图:
, ?, |/ C% i. A; ]) y8 ]4 p5 w  _+ a- f2 r* u, h- Q

0 @/ |1 \$ |4 ~- ~: s& L3.3、ui显示样式修改1: widget 样式表- Y8 H" a, v0 g+ ]2 \0 @' y9 ~

: w/ ]% k6 G# g- B4 N: o7 G/*设置父类窗体,背景边框等属性*/
3 N8 ?2 ]# b: l$ i0 X" v& _, lQWidget {) F; A- I+ j5 j4 @! Y5 F
        background-color: rgb(33, 35, 45);* d: t% ^2 J/ o6 K& e  [6 S7 R
        padding: 8px;
+ [" k% h/ k, V3 O. y) B        border: 2px solid #c3ccdf;- X7 `8 \* F4 N# ?& l' i) a7 E9 Z1 D
        color: rgb(255, 255, 255);6 o3 H" [  O- j
        border-radius: 10px;3 B( w  Y6 `6 q
}1 j/ `1 h9 j& S3 P
18 R2 L7 z- @$ f
2& V) N! a2 l2 F% D% o7 _5 Q6 `
32 A" m, {$ h6 y# M+ O5 i5 B
45 J: k1 M. @7 E( y4 A
55 z0 L( G2 e" e1 V" D& h
6
) [- x7 ?/ v2 ^3 G) o: [7
6 }4 s% m! z* V' Z8) ]3 l, N' I3 M/ P4 f
3.4、ui显示样式修改2:qtconsole启动界面风格指定
' j, ^' q; ?; c; h    self.set_default_style('linux')8 [9 ~% p" J* I
1
8 O+ n. y4 b( j: z7 N- O3.5、该窗口的实例化在uic自动生成的代码中4 [0 t/ S* X! y! B
    self.ConsoleWidget = ConsoleWidget(self.frame_2)
7 ], X% E; j1 O* t0 r, F0 Y    self.ConsoleWidget.setObjectName(u"ConsoleWidget")3 C. j, g+ D& _7 t+ _
1
2 c( M# A0 e0 d0 E5 d5 J& G2
7 T# ]+ ~8 c# ]9 M. x3.6、运行效果6 N4 W+ B& L. e2 w7 l6 |0 _' \
6 u% h/ O4 L6 U: E- D8 i8 G: ?, k
组件2:matplotlib FigureCanvas for qtwidget1 f7 A4 B, ^% U  U7 v% T3 ]' p* M
1、安装相关库, 指定清华源
3 w% v9 e  F. O1 J/ {$ g7 O3 e# U    pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
& t6 e6 F- O' ?: j% N0 T6 z! I    pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
: V$ u- A7 m6 V- b1 M    pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
% I! T: C4 h5 W5 q1* w% |& O* R+ F4 G6 \
2" m, Q6 j/ P5 L# N% ~7 b3 e
3
; j( _% ~" V/ l' r; v; |0 Yyoutube 参考视频# S# j2 S0 N% `
网站教程; @8 ]8 t8 l9 O5 F# e
youtube 参考视频: 不同主题风格调整方法,导入csv数据显示
: `/ N& b0 Q2 w3 C9 D+ P2、 复制 MplWidget.py 文件到 gui/widget 目录下, M6 N/ Q  D2 H  l( P
3、测试 animation, Plotting Live Data in Real-Time
; f* R- V$ W& ]- `% f& F/ p6 B1 @! }8 u, b/ i$ x% ^  ~: p6 z
测试方法:plot_live_data()" Z% f7 A- a0 {
个人理解,animation 应该就是定义了一个与UI同线程的定时器。' }9 Z( F% F6 g- C- r  y+ D7 A/ }
组件3:pyqtgraph4 a, G5 F* b0 A5 }" Q
参考视频1
8 }( E" g( Q$ ]8 A  b# x, N参考视频2et’s Build an Audio Spectrum Analyzer in Python! (pt. 3) Switching to PyQtGraph
* f" }# w3 J# S) r' p) Q1 j
+ W8 |. L2 j+ f# {4 A' _( t% ^! i1、安装相关库, 指定清华源! r% N) b/ z/ @; k) C7 Q
    pip install pyqtgraph -i https://pypi.tuna.tsinghua.edu.cn/simple
5 r7 }) U$ ?( H" n! @5 u+ B& Y/ }# y1
" X5 S, T# P  p9 c2、在 gui\widgets 目录中增加 pyqtgraph_test.py文件/ ?: \; v9 z+ B! F  e
增加 2个按钮(draw, clear) 和 1个pygtgraph窗口控件(PlotWidget) 布局( v7 @. T1 o& r" w
定义刷新时间,帧率,每隔通道的数据记录最大长度等概念6 d# F) |4 J$ ?' n  H, o
注意,每个点之间的采样时间实时性不是QTimer能保证的。
% e# @" j3 j4 r! Y: M/ J9 m# w& Y( |还需要想清楚如何保证准确的采样时间,以及与数据刷新时间间隔之间的关系。(参考已有的scope的习惯)
# N/ w6 J3 a1 l. Z/ ?; B1 v使用 QTimer 定时器, 实现动态刷新的功能, 60FPS -> 定时器时间间隔设定为 1000/60ms+ f9 _+ _9 H# t  \& P! q) d
调用 self.graphicsView.plot(self.y_vals) 绘图,但注意,重复调用相当于创建多个通道的曲线。如果只想显示一个通道的曲线,有2种方式# S2 Z: G  G2 u. ^0 x, k, l7 B
方式1:在 plot() 方法前,调用 clear() 方法' c) K0 b0 A% c3 |( e" t, y8 {$ s
方式2:使用 self.graphicsView.plot.setData() 方法刷新数据,对应的数据清除方法也改一下,改成setData([])
* ~' j4 L' k# ^, e3、参考 Audio Spectrum Analyzer 代码,优化多通道显示刷新方式
: d9 y3 C6 o2 b$ n* l源工程运行前,需要安装的库,pyaudio使用pip安装会失败,使用管理员模式启用conda终端安装
: k7 [) A0 K. j; E- U& t1 Z   pip install opensimplex -i https://pypi.tuna.tsinghua.edu.cn/simple
0 X" h! A/ ]  _* r0 v5 j. d* z% k   conda install pyaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
. _4 `$ ?3 ~& H9 t18 r' m( D- i8 G+ G& M( {6 {
2
$ ]  t7 k& h9 M8 v; L参考 self.traces = {}、set_plotdata() 数据结构和方法,优化多通道显示逻辑6 O% B& P: @" H7 H- c& y* k. E
. X5 d+ r( @4 n3 x( d, w( F) K
右键RUN pyqtgraph_test.py,效果如下:% L" n8 ^" M1 r+ z

$ ]* a9 ?- f/ C* A1 {
6 N' W' g6 G" ~1 C文章知识点与官方知识档案匹配,可进一步学习相关知识
4 K, i" e& b) J% E* B6 h————————————————
$ W( c7 q1 v. N; B版权声明:本文为CSDN博主「HUIJIANG123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
( v; f& \% w3 ~6 ]0 ?& h( ^原文链接:https://blog.csdn.net/u012928587/article/details/124547230
6 O4 i1 A, T4 Y) E# {* v7 m2 x/ y1 i, }" c7 }
& |/ o# \4 B* W0 d* v$ C: |





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5