add imageQT graphicsview

This commit is contained in:
flandre 2025-04-12 20:07:10 +08:00
parent 5dd16e09ae
commit 508f1f619c
8 changed files with 37 additions and 38 deletions

View File

@ -16,6 +16,7 @@ from flandre.nodes.MainUI import MainUI
from flandre.nodes.Muxer import Muxer
from flandre.nodes.Robot import Robot
from flandre.nodes.ImageFFMPEG import ImageFFMPEG
from flandre.nodes.ImageQt import ImageQt
from flandre.utils.Msg import KillMsg
from flandre.config import CONFIG_FOLDER
@ -29,6 +30,7 @@ class LaunchComponent(Enum):
Device = Device
Beamformer = Beamformer
ImageFFMPEG = ImageFFMPEG
ImageQt = ImageQt
def launch(arg: dict[LaunchComponent, dict]):

View File

@ -1,15 +1,14 @@
import sys
from PyQt6 import QtCore
from PyQt6.QtCore import QByteArray
from PyQt6.QtCore import QByteArray, Qt
from PyQt6.QtGui import QImage, QPixmap
from PyQt6.QtWidgets import QMainWindow, QApplication
from PyQt6.QtWidgets import QMainWindow, QApplication, QGraphicsPixmapItem, QGraphicsScene
from flandre.pyqt.Image import Ui_MainWindow
from flandre.pyqt.ZMQReceiver import ZMQReceiver
from flandre.config import C
from flandre.nodes.Node import Node
from flandre.utils.Msg import KillMsg, Msg, ImageArgMsg, BMMsg
from flandre.pyqt.Image import Ui_MainWindow
from flandre.pyqt.ZMQReceiver import ZMQReceiver
from flandre.utils.Msg import KillMsg, Msg, BMMsg
class Adv(QMainWindow, Ui_MainWindow):
@ -20,6 +19,10 @@ class Adv(QMainWindow, Ui_MainWindow):
zmq_receiver = ZMQReceiver(self)
zmq_receiver.zmq_event.connect(self.on_zmq_event)
zmq_receiver.start()
self.g = QGraphicsPixmapItem()
self.s = QGraphicsScene()
self.s.addItem(self.g)
self.graphicsView.setScene(self.s)
def on_zmq_event(self, msg: QByteArray):
msg = Msg.decode_msg(msg.data())
@ -27,17 +30,15 @@ class Adv(QMainWindow, Ui_MainWindow):
if msg.name == '':
self.close()
elif isinstance(msg, BMMsg):
# cvImg = np.frombuffer(msg.data, dtype=np.uint8).reshape((video_height, video_width, 4))[:, :, :3].copy()
# height, width, channel = cvImg.shape
# bytesPerLine = 3 * width
# qImg = QImage(cvImg.data, width, height, bytesPerLine, QImage.Format.Format_RGB888).rgbSwapped()
qImg = QImage(msg.data, C.video_width, C.video_height, 4 * C.video_width, QImage.Format.Format_RGB888).rgbSwapped()
self.label.setPixmap(QPixmap(qImg))
@QtCore.pyqtSlot(int)
def vc(self, v):
if self.horizontalSlider.sender() is None:
self.p.send(ImageArgMsg('ui', v))
qImg = QImage(
msg.data,
C.video_width,
C.video_height,
4 * C.video_width,
QImage.Format.Format_RGBA8888
)
self.g.setPixmap(QPixmap(qImg))
self.graphicsView.fitInView(self.s.sceneRect(), Qt.AspectRatioMode.KeepAspectRatio)
class ImageQt(Node):

View File

@ -1,4 +1,4 @@
# Form implementation generated from reading ui file 'Image.ui'
# Form implementation generated from reading ui file '/home/lambda/source/scarlet/flandre/flandre/pyqt/Image.ui'
#
# Created by: PyQt6 UI code generator 6.8.0
#
@ -17,12 +17,14 @@ class Ui_MainWindow(object):
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(parent=self.centralwidget)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.graphicsView = QtWidgets.QGraphicsView(parent=self.centralwidget)
self.graphicsView.setDragMode(QtWidgets.QGraphicsView.DragMode.ScrollHandDrag)
self.graphicsView.setResizeAnchor(QtWidgets.QGraphicsView.ViewportAnchor.AnchorUnderMouse)
self.graphicsView.setObjectName("graphicsView")
self.gridLayout.addWidget(self.graphicsView, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
@ -35,4 +37,3 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "TextLabel"))

View File

@ -16,9 +16,12 @@
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>TextLabel</string>
<widget class="QGraphicsView" name="graphicsView">
<property name="dragMode">
<enum>QGraphicsView::DragMode::ScrollHandDrag</enum>
</property>
<property name="resizeAnchor">
<enum>QGraphicsView::ViewportAnchor::AnchorUnderMouse</enum>
</property>
</widget>
</item>
@ -30,7 +33,7 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>22</height>
<height>30</height>
</rect>
</property>
</widget>

View File

@ -274,7 +274,7 @@ class Ui_MainWindow(object):
self.c_playback_seq_name.setObjectName("c_playback_seq_name")
self.c_playback_seq_name.addItem("")
self.gridLayout_6.addWidget(self.c_playback_seq_name, 0, 1, 1, 2)
self.s_sid = QtWidgets.QSlider(parent=self.g_playback)
self.s_sid = QJumpSlider(parent=self.g_playback)
self.s_sid.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.s_sid.setObjectName("s_sid")
self.gridLayout_6.addWidget(self.s_sid, 1, 1, 1, 1)

View File

@ -512,7 +512,7 @@ border-radius: 7px;
</widget>
</item>
<item row="1" column="1">
<widget class="QSlider" name="s_sid">
<widget class="QJumpSlider" name="s_sid">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>

View File

@ -22,6 +22,7 @@ def main(data_folder, generate_pyqt, dev):
return
if generate_pyqt:
subprocess.run([pyuic6, '-o', flandre.PYQT / 'Main.py', flandre.PYQT / 'Main.ui'])
subprocess.run([pyuic6, '-o', flandre.PYQT / 'Image.py', flandre.PYQT / 'Image.ui'])
if data_folder is not None:
C.data_folder = Path(data_folder)

View File

@ -1,9 +0,0 @@
[MainUI]
[ImageCV]
[Muxer]
[Loader]
[Beamformer]
#[ImageFFMPEG]
#[Robot]
#[Device]