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

View File

@ -1,15 +1,14 @@
import sys import sys
from PyQt6 import QtCore from PyQt6.QtCore import QByteArray, Qt
from PyQt6.QtCore import QByteArray
from PyQt6.QtGui import QImage, QPixmap 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.config import C
from flandre.nodes.Node import Node 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): class Adv(QMainWindow, Ui_MainWindow):
@ -20,6 +19,10 @@ class Adv(QMainWindow, Ui_MainWindow):
zmq_receiver = ZMQReceiver(self) zmq_receiver = ZMQReceiver(self)
zmq_receiver.zmq_event.connect(self.on_zmq_event) zmq_receiver.zmq_event.connect(self.on_zmq_event)
zmq_receiver.start() 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): def on_zmq_event(self, msg: QByteArray):
msg = Msg.decode_msg(msg.data()) msg = Msg.decode_msg(msg.data())
@ -27,17 +30,15 @@ class Adv(QMainWindow, Ui_MainWindow):
if msg.name == '': if msg.name == '':
self.close() self.close()
elif isinstance(msg, BMMsg): elif isinstance(msg, BMMsg):
# cvImg = np.frombuffer(msg.data, dtype=np.uint8).reshape((video_height, video_width, 4))[:, :, :3].copy() qImg = QImage(
# height, width, channel = cvImg.shape msg.data,
# bytesPerLine = 3 * width C.video_width,
# qImg = QImage(cvImg.data, width, height, bytesPerLine, QImage.Format.Format_RGB888).rgbSwapped() C.video_height,
qImg = QImage(msg.data, C.video_width, C.video_height, 4 * C.video_width, QImage.Format.Format_RGB888).rgbSwapped() 4 * C.video_width,
self.label.setPixmap(QPixmap(qImg)) QImage.Format.Format_RGBA8888
)
@QtCore.pyqtSlot(int) self.g.setPixmap(QPixmap(qImg))
def vc(self, v): self.graphicsView.fitInView(self.s.sceneRect(), Qt.AspectRatioMode.KeepAspectRatio)
if self.horizontalSlider.sender() is None:
self.p.send(ImageArgMsg('ui', v))
class ImageQt(Node): 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 # Created by: PyQt6 UI code generator 6.8.0
# #
@ -17,12 +17,14 @@ class Ui_MainWindow(object):
self.centralwidget.setObjectName("centralwidget") self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout") self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(parent=self.centralwidget) self.graphicsView = QtWidgets.QGraphicsView(parent=self.centralwidget)
self.label.setObjectName("label") self.graphicsView.setDragMode(QtWidgets.QGraphicsView.DragMode.ScrollHandDrag)
self.gridLayout.addWidget(self.label, 0, 0, 1, 1) self.graphicsView.setResizeAnchor(QtWidgets.QGraphicsView.ViewportAnchor.AnchorUnderMouse)
self.graphicsView.setObjectName("graphicsView")
self.gridLayout.addWidget(self.graphicsView, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget) MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow) 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") self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar) MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow) self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
@ -35,4 +37,3 @@ class Ui_MainWindow(object):
def retranslateUi(self, MainWindow): def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "TextLabel"))

View File

@ -16,9 +16,12 @@
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QLabel" name="label"> <widget class="QGraphicsView" name="graphicsView">
<property name="text"> <property name="dragMode">
<string>TextLabel</string> <enum>QGraphicsView::DragMode::ScrollHandDrag</enum>
</property>
<property name="resizeAnchor">
<enum>QGraphicsView::ViewportAnchor::AnchorUnderMouse</enum>
</property> </property>
</widget> </widget>
</item> </item>
@ -30,7 +33,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>800</width> <width>800</width>
<height>22</height> <height>30</height>
</rect> </rect>
</property> </property>
</widget> </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.setObjectName("c_playback_seq_name")
self.c_playback_seq_name.addItem("") self.c_playback_seq_name.addItem("")
self.gridLayout_6.addWidget(self.c_playback_seq_name, 0, 1, 1, 2) 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.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.s_sid.setObjectName("s_sid") self.s_sid.setObjectName("s_sid")
self.gridLayout_6.addWidget(self.s_sid, 1, 1, 1, 1) self.gridLayout_6.addWidget(self.s_sid, 1, 1, 1, 1)

View File

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

View File

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

View File

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