fix mainui b1-b4

This commit is contained in:
flandre 2025-04-12 18:02:29 +08:00
parent 6b09f6ba69
commit 0b95169db5
7 changed files with 132 additions and 67 deletions

View File

@ -7,7 +7,7 @@ import zmq
from flandre.config import C, ISDEV from flandre.config import C, ISDEV
from flandre.nodes.Node import Node from flandre.nodes.Node import Node
from flandre.utils.Msg import MoveAxisMsg, KillMsg, SetSeqMetaMsg, SeqIdMinMax, SetBaseMsg, SeqListMsg, SeqIdList, \ from flandre.utils.Msg import MoveAxisMsg, KillMsg, SetSeqMetaMsg, SeqIdMinMax, SetBaseMsg, PlaybackSeqListMsg, SeqIdList, \
SetSidMsg, RfFrameWithMetaMsg SetSidMsg, RfFrameWithMetaMsg
from flandre.utils.RfFile import RfSequence from flandre.utils.RfFile import RfSequence
@ -51,7 +51,7 @@ class Loader(Node):
C.data_folder = base C.data_folder = base
if not ISDEV: if not ISDEV:
C.write_config() C.write_config()
self.send(SeqListMsg(seq_list)) self.send(PlaybackSeqListMsg(seq_list))
elif isinstance(msg, KillMsg): elif isinstance(msg, KillMsg):
if msg.name == '': if msg.name == '':
break break

View File

@ -7,16 +7,16 @@ from enum import Enum, auto
from pathlib import Path from pathlib import Path
import zmq import zmq
from PyQt6 import QtCore, QtWidgets, QtGui from PyQt6 import QtWidgets, QtGui
from PyQt6.QtCore import QByteArray from PyQt6.QtCore import QByteArray, pyqtSlot
from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QFileDialog, QLineEdit from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame, QMessageBox, QFileDialog, QLineEdit
from flandre import ASSETS from flandre import ASSETS
from flandre.pyqt.Main import Ui_MainWindow
from flandre.pyqt.ZMQReceiver import ZMQReceiver
from flandre.config import DS, C from flandre.config import DS, C
from flandre.nodes.Node import Node from flandre.nodes.Node import Node
from flandre.utils.Msg import KillMsg, Msg, ImageArgMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \ from flandre.pyqt.Main import Ui_MainWindow
from flandre.pyqt.ZMQReceiver import ZMQReceiver
from flandre.utils.Msg import KillMsg, Msg, ImageArgMsg, SeqIdMinMax, MoveAxisMsg, PlaybackSeqListMsg, SetBaseMsg, \
SetSeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \ SetSeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \
SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg, \ SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg, \
SeqIdList, SetWindowVisibleMsg, SetSidMsg, ImagingConfigNameListMsg, DeviceZero, DeviceSwitchMsg, \ SeqIdList, SetWindowVisibleMsg, SetSidMsg, ImagingConfigNameListMsg, DeviceZero, DeviceSwitchMsg, \
@ -89,12 +89,9 @@ class Adv(QMainWindow, Ui_MainWindow):
self.s_sid.valueChanged.connect(self.on_s_sid) self.s_sid.valueChanged.connect(self.on_s_sid)
self.sp_sid.valueChanged.connect(self.on_sp_sid) self.sp_sid.valueChanged.connect(self.on_sp_sid)
self.arg = ImageArgMsg('ui', t_start=0, t_end=1499) self.arg = ImageArgMsg('ui', t_start=0, t_end=1499)
self.b_base.clicked.connect(self.on_base_open)
self.seq_meta: RfSequenceMeta | None = None self.seq_meta: RfSequenceMeta | None = None
# self.b_play_live.clicked.connect(self.on_play_live) # self.b_play_live.clicked.connect(self.on_play_live)
# self.b_play_playback.clicked.connect(self.on_play_playback) # self.b_play_playback.clicked.connect(self.on_play_playback)
self.g_playback.clicked.connect(self.on_play_playback)
self.g_live.clicked.connect(self.on_play_live)
self.b_record.clicked.connect(self.on_record) self.b_record.clicked.connect(self.on_record)
self.record = False self.record = False
@ -109,9 +106,6 @@ class Adv(QMainWindow, Ui_MainWindow):
if Path(e).exists() else if Path(e).exists() else
self.l_base.setStyleSheet("background-color: pink;")) self.l_base.setStyleSheet("background-color: pink;"))
self.b1, self.b2 = False, False
self.b3, self.b4 = False, False
self.record_size_cnt = 0 self.record_size_cnt = 0
self.record_frame_cnt = 0 self.record_frame_cnt = 0
self.update_device_buttons() self.update_device_buttons()
@ -201,15 +195,11 @@ class Adv(QMainWindow, Ui_MainWindow):
base = QFileDialog.getExistingDirectory(self, 'Select Base Folder', DS.__str__()) base = QFileDialog.getExistingDirectory(self, 'Select Base Folder', DS.__str__())
self.l_base.setText(Path(base).__str__()) self.l_base.setText(Path(base).__str__())
# def update_b_play_live_enabled(self): @pyqtSlot()
# self.b_play_live.setEnabled(all([self.b1, self.b2])) def on_b_base_clicked(self):
def on_base_open(self):
if Path(self.l_base.text()): if Path(self.l_base.text()):
self.p.send(SetBaseMsg(self.l_base.text())) self.p.send(SetBaseMsg(self.l_base.text()))
self.g_cap.setEnabled(True) self.g_cap.setEnabled(True)
# self.b1 = True
# self.update_b_play_live_enabled()
def set_device_connection(self, status: LinkStatus): def set_device_connection(self, status: LinkStatus):
match status: match status:
@ -241,36 +231,19 @@ class Adv(QMainWindow, Ui_MainWindow):
self.lb_device_enable.setText('Enabled') self.lb_device_enable.setText('Enabled')
self.lb_device_enable.setStyleSheet('background-color: LightGreen;') self.lb_device_enable.setStyleSheet('background-color: LightGreen;')
def update_c_playback_seq_name_enable(self): @pyqtSlot(bool)
self.c_playback_seq_name.setEnabled(all([self.b3, self.b4])) def on_g_live_clicked(self, b):
def on_play_live(self, b):
if b: if b:
self.g_playback.setChecked(False) self.g_playback.setChecked(False)
# self.s_sid.setEnabled(False)
# self.b_play_live.setStyleSheet('background-color: red;')
# self.b_play_playback.setStyleSheet('')
# self.b_record.setEnabled(True)
# self.l_record_commit.setEnabled(True)
# self.p.send(SetSeqMetaMsg('live', self.c_live_seq_name.itemText(self.c_live_seq_name.currentIndex())))
self.p.send(SetPlayMode('live')) self.p.send(SetPlayMode('live'))
self.b3 = False logger.info(f'set playmode live')
self.update_c_playback_seq_name_enable()
def on_play_playback(self, b): @pyqtSlot(bool)
def on_g_playback_clicked(self, b):
if b: if b:
self.g_live.setChecked(False) self.g_live.setChecked(False)
# self.s_sid.setEnabled(True)
# self.b_play_live.setStyleSheet('')
# self.b_play_playback.setStyleSheet('background-color: red;')
# self.b_record.setEnabled(False)
# self.l_record_commit.setEnabled(False)
self.p.send(
SetSeqMetaMsg('playback', self.c_playback_seq_name.itemText(self.c_playback_seq_name.currentIndex())))
self.p.send(SetPlayMode('playback')) self.p.send(SetPlayMode('playback'))
logger.debug(f'set playmode playback') logger.info(f'set playmode playback')
self.b3 = True
self.update_c_playback_seq_name_enable()
def on_device_disable(self): def on_device_disable(self):
self.p.send(SetDeviceEnabledMsg(False)) self.p.send(SetDeviceEnabledMsg(False))
@ -384,16 +357,12 @@ class Adv(QMainWindow, Ui_MainWindow):
self.sp_sid.setMaximum(msg.li.__len__() - 1) self.sp_sid.setMaximum(msg.li.__len__() - 1)
self.l_seq_min.setText(str(min(msg.li))) self.l_seq_min.setText(str(min(msg.li)))
self.l_seq_max.setText(str(max(msg.li))) self.l_seq_max.setText(str(max(msg.li)))
elif isinstance(msg, SeqListMsg): elif isinstance(msg, PlaybackSeqListMsg):
self.b4 = True
self.update_c_playback_seq_name_enable()
self.c_playback_seq_name.clear() self.c_playback_seq_name.clear()
for name in msg.value: for name in msg.value:
self.c_playback_seq_name.addItem(name) self.c_playback_seq_name.addItem(name)
if msg.value.__len__() > 0: if msg.value.__len__() > 0:
self.p.send(SetSeqMetaMsg('playback', self.c_playback_seq_name.itemText( self.p.send(SetSeqMetaMsg('playback', self.c_playback_seq_name.currentText()))
self.c_playback_seq_name.currentIndex())))
# self.b_play_playback.setEnabled(True)
elif isinstance(msg, SetSeqMetaMsg): elif isinstance(msg, SetSeqMetaMsg):
self.seq_meta = RfSequenceMeta.from_name(msg.name) self.seq_meta = RfSequenceMeta.from_name(msg.name)
mmax_shape0 = max(self.seq_meta.shape) mmax_shape0 = max(self.seq_meta.shape)
@ -469,59 +438,51 @@ class Adv(QMainWindow, Ui_MainWindow):
# event.accept() # event.accept()
# event.ignore() # event.ignore()
@QtCore.pyqtSlot(int) @pyqtSlot(int)
def on_cb_bscan(self, v): def on_cb_bscan(self, v):
if self.cb_bscan.sender() is None: if self.cb_bscan.sender() is None:
self.p.send(SetWindowVisibleMsg('ui', 'bscan', v == 2)) self.p.send(SetWindowVisibleMsg('ui', 'bscan', v == 2))
@QtCore.pyqtSlot(int) @pyqtSlot(int)
def on_t_start(self, v): def on_t_start(self, v):
if self.s_t_end.sender() is None: if self.s_t_end.sender() is None:
self.arg.t_start = v self.arg.t_start = v
self.p.send(self.arg) self.p.send(self.arg)
@QtCore.pyqtSlot(int) @pyqtSlot(int)
def on_t_end(self, v): def on_t_end(self, v):
if self.s_t_end.sender() is None: if self.s_t_end.sender() is None:
self.arg.t_end = v self.arg.t_end = v
self.p.send(self.arg) self.p.send(self.arg)
@QtCore.pyqtSlot(int) @pyqtSlot(int)
def on_select_plyayback_seq_name(self, v): def on_select_plyayback_seq_name(self, v):
if self.c_playback_seq_name.sender() is None or isinstance(self.c_playback_seq_name.sender(), QFrame): if self.c_playback_seq_name.sender() is None or isinstance(self.c_playback_seq_name.sender(), QFrame):
self.p.send(SetSeqMetaMsg('playback', self.c_playback_seq_name.itemText(v))) self.p.send(SetSeqMetaMsg('playback', self.c_playback_seq_name.itemText(v)))
@QtCore.pyqtSlot(int) @pyqtSlot(int)
def on_s_sid(self, v): def on_s_sid(self, v):
if self.s_sid.sender() is None: if self.s_sid.sender() is None:
self.p.send(SetSidMsg(v)) self.p.send(SetSidMsg(v))
@QtCore.pyqtSlot(int) @pyqtSlot(int)
def on_sp_sid(self, v): def on_sp_sid(self, v):
if self.sp_sid.sender() is None: if self.sp_sid.sender() is None:
self.p.send(SetSidMsg(v)) self.p.send(SetSidMsg(v))
# @QtCore.pyqtSlot(int) # @pyqtSlot(int)
def on_seq_meta(self): def on_seq_meta(self):
v = self.c_live_seq_name.currentIndex() v = self.c_live_seq_name.currentIndex()
name = self.c_live_seq_name.currentText() name = self.c_live_seq_name.currentText()
if name != 'Empty': if name != 'Empty':
self.b_live_seq_apply.setEnabled(False) self.b_live_seq_apply.setEnabled(False)
self.p.send(SetDeviceConfigMsg(name, self.c_live_seq_name.itemData(v))) self.p.send(SetDeviceConfigMsg(name, self.c_live_seq_name.itemData(v)))
# self.p.send(SetSeqMetaMsg('live', self.c_live_seq_name.itemText(v)))
# if self.c_live_seq_name.sender() is None or isinstance(self.c_live_seq_name.sender(), QFrame):
# if self.c_live_seq_name.itemText(v) != 'Empty':
# self.b2 = True
# # self.update_b_play_live_enabled()
# self.p.send(SetDeviceConfigMsg(self.c_live_seq_name.itemData(v)))
# self.p.send(SetSeqMetaMsg('live', self.c_live_seq_name.itemText(v)))
class MainUI(Node): class MainUI(Node):
topics = [ImageArgMsg, SeqIdMinMax, MoveAxisMsg, topics = [ImageArgMsg, SeqIdMinMax, MoveAxisMsg,
ImagingConfigNameListMsg, ImagingConfigNameListMsg,
SeqListMsg, SetSeqMetaMsg, SeqIdList, SetWindowVisibleMsg, SetSidMsg, PlaybackSeqListMsg, SetSeqMetaMsg, SeqIdList, SetWindowVisibleMsg, SetSidMsg,
DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg,
RobotRtsiMsg, DeviceSwitchMsg, RobotRtsiMsg, DeviceSwitchMsg,
RecordFrameMsg, SeqMetaMsg] RecordFrameMsg, SeqMetaMsg]

View File

@ -270,7 +270,6 @@ class Ui_MainWindow(object):
self.label_16.setObjectName("label_16") self.label_16.setObjectName("label_16")
self.gridLayout_6.addWidget(self.label_16, 0, 0, 1, 1) self.gridLayout_6.addWidget(self.label_16, 0, 0, 1, 1)
self.c_playback_seq_name = QtWidgets.QComboBox(parent=self.g_playback) self.c_playback_seq_name = QtWidgets.QComboBox(parent=self.g_playback)
self.c_playback_seq_name.setEnabled(False)
self.c_playback_seq_name.setEditable(False) self.c_playback_seq_name.setEditable(False)
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("")

View File

@ -21,7 +21,7 @@ class BG(Enum):
SeqMetaMsg = auto() SeqMetaMsg = auto()
SeqIdMinMax = auto() SeqIdMinMax = auto()
SetBaseMsg = auto() SetBaseMsg = auto()
SeqListMsg = auto() PlaybackSeqListMsg = auto()
SetPlayMode = auto() SetPlayMode = auto()
SetDeviceEnabledMsg = auto() SetDeviceEnabledMsg = auto()
SetDeviceConnectedMsg = auto() SetDeviceConnectedMsg = auto()
@ -160,7 +160,7 @@ class SetBaseMsg(StrMsg):
@dataclasses.dataclass @dataclasses.dataclass
class SeqListMsg(Msg): class PlaybackSeqListMsg(Msg):
value: list[str] value: list[str]

45
test/test.ui Normal file
View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="b_test">
<property name="geometry">
<rect>
<x>330</x>
<y>230</y>
<width>301</width>
<height>251</height>
</rect>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>30</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

36
test/test2.py Normal file
View File

@ -0,0 +1,36 @@
# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt6 UI code generator 6.8.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.b_test = QtWidgets.QPushButton(parent=self.centralwidget)
self.b_test.setGeometry(QtCore.QRect(330, 230, 301, 251))
self.b_test.setObjectName("b_test")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.b_test.setText(_translate("MainWindow", "PushButton"))

24
test/test2ui.py Normal file
View File

@ -0,0 +1,24 @@
import sys
from PyQt6.QtCore import pyqtSlot
from PyQt6.QtWidgets import QApplication, QMainWindow
from test2 import Ui_MainWindow
class Adv(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Adv, self).__init__(parent)
self.setupUi(self)
@pyqtSlot(bool)
def on_b_test_clicked(self,a):
print('on_b_test',a)
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setDesktopFileName('TestTest')
MainWindow = Adv()
MainWindow.show()
app.exec()