【发布时间】:2019-12-09 12:21:06
【问题描述】:
我必须创建一个如下所示的自定义小部件:
custom_widget_sketch
每个自定义小部件代表一个 LIPO 电池,并显示电池电压(V)、状态文本(charging, discharging, etc)、电池序列号(S/N) 和三个状态LEDs(黄色、绿色和红色)
创建自定义小部件后,我需要在 6*5 的网格中添加其中的 30 个。我在这里的假设是,一旦我创建了自定义小部件,它应该就像在 QGridLayout 中添加一个 QPushButton 一样简单,如下所示:
custom_layput = QGridLayout()
custom_layout.addWidget(custom_widget, 0, 0)
custom_layout.addWidget(custom_widget, 0, 1)
.
.
.
custom_layout.addWidget(custom_widget, 6, 5)
最终屏幕如下所示:
main_window_sketch
考虑到所有这些要求,我有以下问题:
- 我能否使用 PyQt5 创建如此复杂/丰富的自定义小部件?可行吗?
- 这是创建自定义小部件的正确方法吗:首先使用 QPainter 绘制一个正方形(这是 custom_widget_sketch 中的蓝色正方形),然后添加 QLineEdits 以显示电压 (V) 文本、序列号 (S/N) text 和 Status 文本,添加一个 QLabel 用于在自定义小部件中显示“V”、“S/N”和“STATUS”标签,然后绘制三个圆圈:黄色、绿色和红色各一个
LEDs,然后使用QVBoxLayout和QHBoxLayout 的组合来排列QLineEdits、QLabels、正方形和圆形(LED 指示灯) - 如何打包此自定义小部件,以便我可以像添加
QPushButton或QLineEdit一样简单地将其添加到布局中?
PS:custom_widget_sketch 还包含一条线和一个正方形,其中左上角有三条线。这是为了描述 LIPO 电池的连接器。现在实施它可能太复杂了。因此,即使我能够实现这两个元素以外的所有内容,我也会很高兴
我已经解决了一些 SO 问题,但它们都参考了一个教程,这不是我的最终目标。
我将不胜感激任何代码 sn-ps、代码概要/要遵循的步骤或任何文章/教程的链接,这些文章/教程创建了类似于我希望创建的自定义小部件。
【问题讨论】:
-
您可以使用 qtdesigner 为单个小部件创建一个类或 ui,并将其多次添加到布局中,如您所说。对于闪烁的 LED,您可以创建 QLabels 并向它们添加红色、黄色、绿色图标,并使用 QTimer 显示/隐藏模仿闪烁 LED 的图标
-
你也可以用 QPropertyAnimation 做一些事情。 zetcode.com/pyqt/qpropertyanimation
-
嗨 @Drees,感谢您的建议,我最终为每个 LED 创建了一个标签,并使用
self.yellow_led_label.setStyleSheet("QLabel {background-color : yellow; border-color : black; border-width : 1px; border-style : solid; border-radius : 10px; min-height: 20px; min-width: 20px}")创建了一个圆形标签并为 LED 设置颜色。我还没有实现动画,但也感谢那个链接。
标签: python pyqt pyqt5 customization