数学建模社区-数学中国

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

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

- w' E9 `) Z/ D+ i2 APython UI设计学习笔记,在学习的UI框架中嵌入其他ui组件:增加组件到主画面的pages中
& T! M) W7 u2 m9 |+ ?0 F" @: A4 {; r* G. W1 M2 }; E0 x' R' u
# i2 p, h% {; ]* v" ^- x
文章目录
- Z# u( Y! Q7 I1 @在Pyside2中嵌入其他ui组件:增加组件到`pages`中,在`develop`分支中开发, D7 r$ H: {) s. a+ r+ g3 ^
组件1:`jupyter qtconsole`2 `+ f( Y  ]7 j% _4 F: |
组件2:`matplotlib FigureCanvas for qtwidget`$ p3 ^; @( N5 r  B
组件3:`pyqtgraph`
% S4 ^( P5 u+ V4 n1 F6 r) }在Pyside2中嵌入其他ui组件:增加组件到pages中,在develop分支中开发4 A" z+ U2 J6 v
以下组件部分测试测试参考:
  H+ [) g! X: A* ]) Z
! G$ ~4 B% Y* k, l+ V. l- Z# a/ \参考的B站视频
5 V( C) e4 S* A% ~1 N2 iqtconsole 官方文档:The Qt Console for Jupyter
  n0 ~$ H" W. v& P- u! v组件1:jupyter qtconsole# h! U+ w8 O" I/ H! m; H
1、安装 qtconsole 库, 经测试发现,该库目前不支持 pyside6, 所以更改解释器环境到 pyqt5 or pyside2
1 D# s0 `/ r7 S8 O6 `0 k9 ?/ m    pip install qtconsole -i  https://pypi.tuna.tsinghua.edu.cn/simple$ N% S& d) a+ S6 U: Q
1  i$ ^# I, O' K: |) j5 j" Z# u
2、尝试启动+ b" `" u2 O) _  o
   jupyter qtconsole
7 R/ ?1 U8 V! `6 j" a9 U# t8 z1: F9 |6 B! Q+ u- B4 m6 ]
: _* S, C8 ?9 V& Q# b& t7 K

% T9 O5 u5 [; a2 ]0 x3、尝试嵌入组件到pyside2 ui中
% }% f; C5 G4 C: ^) |. ?* J- V3 S2 [1 P" y8 D: S8 @6 C
3.1、复制参考的py代码 consolewidget.py 到 gui.widgets 文件目录下
/ X: h+ M6 G' k' ^( j
5 k  J# Z2 h& f5 V( R( C* l/ A$ x' Q4 o3.2、在Qt Designer 使用 Widget(基类/父类) promote to ConsoleWidget,并修改对象名称,操作如下图:
( }  _/ y9 N* b5 h$ q! ]
4 ?) ~+ `# {, l; ]5 m2 `1 b2 Z. l4 `1 v/ ?
3.3、ui显示样式修改1: widget 样式表: j3 @  t( G& v5 ]% _7 V
2 j+ ^8 O6 m- c; d# T. e4 I' h
/*设置父类窗体,背景边框等属性*/
2 Q& \2 X' `- Z. h$ [QWidget {4 I. f( d9 T; h* ^3 u- P
        background-color: rgb(33, 35, 45);
" f2 m) c$ W3 h* S$ }        padding: 8px;$ D, a! u  V8 B4 W
        border: 2px solid #c3ccdf;
4 ]2 i0 _/ {3 d8 T8 k9 U9 [        color: rgb(255, 255, 255);# g/ Q/ @) V  G, u; @- r
        border-radius: 10px;
9 m% R4 i% K3 i: w( L5 Q3 s  t}
% B* C, i& q$ U2 [  z. s/ Y1
& \' S7 j" C, G9 E2
, ?; V. @9 I# Y. A6 {/ F; y, r3
% Z- A/ L+ N5 d; s8 v4$ Z9 n8 d# [  x2 F1 n& D
5& R" k1 B/ p) \5 n
6
" Q- W! {4 P$ f# U7
  U8 K) S4 X- D1 ]6 t, \8
  X1 [+ o7 x4 y1 [5 ^3.4、ui显示样式修改2:qtconsole启动界面风格指定
9 A0 Y5 [, @- s+ d- W1 H    self.set_default_style('linux')
' u- a3 k3 B) I+ h+ N$ r1 _+ I1. @! D9 \# C& R0 l9 L, S
3.5、该窗口的实例化在uic自动生成的代码中
3 V8 o7 k. E. z3 i    self.ConsoleWidget = ConsoleWidget(self.frame_2)9 A; J' K* I7 }, Q) Q  c. d% I
    self.ConsoleWidget.setObjectName(u"ConsoleWidget")8 z- s! f; Y* r6 e$ X
12 l# E  b) A* t1 f) r+ [+ k
2& y6 |( Z2 X8 M* h! W
3.6、运行效果6 U( u9 @5 @' u% z
8 T+ Q9 J; j, m
组件2:matplotlib FigureCanvas for qtwidget
4 O" H4 W+ R7 d1、安装相关库, 指定清华源4 Q% k4 A3 C& l4 q
    pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
& b6 t$ W# ^- q6 x5 P: O" G3 G  w" x    pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
, M/ J; j) ~  j  i8 i    pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple6 B8 a9 U) L/ S2 d9 u
1
& Y: `8 [! U1 Q/ ?- d$ E( N4 ^2
! V) ?0 ?1 O9 m% u$ k3
, W% n+ Y$ j! W% r) ^youtube 参考视频
! Y6 h9 ?) X2 @6 h网站教程
/ K9 ^; k8 m0 D. I; R% J8 qyoutube 参考视频: 不同主题风格调整方法,导入csv数据显示7 \" i/ p# x- w
2、 复制 MplWidget.py 文件到 gui/widget 目录下) R) @( b8 ]' r  _9 \5 }& d- C
3、测试 animation, Plotting Live Data in Real-Time( G2 m2 ^/ X; n3 A1 e. S" K$ [" N' H

- B6 t/ }* D9 H3 J3 r0 x+ _% C测试方法:plot_live_data()
1 i; _8 \/ j0 S& Y个人理解,animation 应该就是定义了一个与UI同线程的定时器。/ R" F* [1 e" |8 o
组件3:pyqtgraph
+ Y' @; k! `* r* `3 x: q+ @* }参考视频1
2 R$ r, e8 G) _0 f参考视频2et’s Build an Audio Spectrum Analyzer in Python! (pt. 3) Switching to PyQtGraph! d, z# Z' x: H, @! P: }, {
' }5 O( H. G/ {: h( y
1、安装相关库, 指定清华源; x1 r! ?/ `+ x5 T8 Z# {
    pip install pyqtgraph -i https://pypi.tuna.tsinghua.edu.cn/simple
1 u5 H; G! e0 }+ x1
+ d" j7 m7 `: _; G- D) ^4 _2、在 gui\widgets 目录中增加 pyqtgraph_test.py文件1 V. _" M9 f$ j7 {, p! I
增加 2个按钮(draw, clear) 和 1个pygtgraph窗口控件(PlotWidget) 布局
/ n7 U2 Y6 P+ S) N) Y  o定义刷新时间,帧率,每隔通道的数据记录最大长度等概念+ X# W( b# k1 f) {# b" L6 {
注意,每个点之间的采样时间实时性不是QTimer能保证的。2 w$ {* _; ?) |# z8 B; m
还需要想清楚如何保证准确的采样时间,以及与数据刷新时间间隔之间的关系。(参考已有的scope的习惯)
7 ~7 k+ h: F2 \: h9 O使用 QTimer 定时器, 实现动态刷新的功能, 60FPS -> 定时器时间间隔设定为 1000/60ms3 t/ e& c  E7 ~/ l: D" N, P' P. m
调用 self.graphicsView.plot(self.y_vals) 绘图,但注意,重复调用相当于创建多个通道的曲线。如果只想显示一个通道的曲线,有2种方式
* v" S7 u' }. f2 S' U方式1:在 plot() 方法前,调用 clear() 方法9 Y6 Z+ c) _7 V: O! r9 i2 T4 g/ n
方式2:使用 self.graphicsView.plot.setData() 方法刷新数据,对应的数据清除方法也改一下,改成setData([])- _5 u) l/ r7 q  x. z. j
3、参考 Audio Spectrum Analyzer 代码,优化多通道显示刷新方式* T3 f; H. I: `0 G  v8 t
源工程运行前,需要安装的库,pyaudio使用pip安装会失败,使用管理员模式启用conda终端安装
( x+ n$ o  P# P# o( U  B" Y( Y   pip install opensimplex -i https://pypi.tuna.tsinghua.edu.cn/simple
: o% b* o2 j* f. _( S* C   conda install pyaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
0 q- ~9 I1 R7 }) w8 r9 `1
9 f: E; P& g" k  Y2
' g; c6 X& x, t4 J  g6 J参考 self.traces = {}、set_plotdata() 数据结构和方法,优化多通道显示逻辑) S) x& t% v. @6 W8 H; E% j. n
0 X) j1 q  b- }; Z! n) D
右键RUN pyqtgraph_test.py,效果如下:# O; N  p- I  H6 [

* k0 M0 c6 Q3 V/ w5 J
+ W* m) q' ~) C: D+ t! h4 m3 x文章知识点与官方知识档案匹配,可进一步学习相关知识
% |) ]+ b2 j3 x3 Z2 S9 O& ?% J————————————————3 C  m0 D5 P0 P2 A
版权声明:本文为CSDN博主「HUIJIANG123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# }$ e! S3 C. l3 V' F* q原文链接:https://blog.csdn.net/u012928587/article/details/124547230
8 F2 R4 ^3 S4 E* I# r; d# F; s: N+ M

( q' ^% b4 p: J; @




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