find match case Path

fix kde6
This commit is contained in:
flandre 2025-04-12 15:39:56 +08:00
parent 20539edf5c
commit 4e02ce83d3
8 changed files with 65 additions and 15 deletions

View File

@ -1 +0,0 @@
{"t_start": 21, "t_end": 838}

View File

@ -1 +0,0 @@
{"t_start": 0, "t_end": 1499}

12
dev.py
View File

@ -3,17 +3,27 @@ import sys
import subprocess import subprocess
from pathlib import Path from pathlib import Path
import click
sys.argv.append('--dev') sys.argv.append('--dev')
import flandre import flandre
from flandre.launcher import launch_from_file from flandre.launcher import launch_from_file
from flandre.config import C
def main(): @click.command()
@click.option('--data_folder', default=None)
@click.option('--generate_pyqt', default=True)
@click.option('--dev', default=True, is_flag=True)
def main(data_folder, generate_pyqt, dev):
if (pyuic6 := shutil.which('pyuic6')) is None: if (pyuic6 := shutil.which('pyuic6')) is None:
print('pyuic6 is not installed') print('pyuic6 is not installed')
return return
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'])
if data_folder is not None:
C.data_folder = Path(data_folder)
launch_from_file(Path(__file__).parent / 'dev.toml') launch_from_file(Path(__file__).parent / 'dev.toml')

View File

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

View File

@ -88,22 +88,25 @@ class SoftwareConfig:
j = json.loads(path.read_text(encoding='utf-8')) j = json.loads(path.read_text(encoding='utf-8'))
arg_d = dict() arg_d = dict()
for field in dataclasses.fields(SoftwareConfig): for field in dataclasses.fields(SoftwareConfig):
v = j[field.name]
match field.type: match field.type:
case Path(): case Path():
arg_d[field.name] = Path(j[field.name]) arg_d[field.name] = Path(v)
case _: case _:
arg_d[field.name] = j[field.name] arg_d[field.name] = v
sc = SoftwareConfig(**arg_d) sc = SoftwareConfig(**arg_d)
return sc return sc
def write_config(self): def write_config(self):
arg_d = dict() arg_d = dict()
for field in dataclasses.fields(SoftwareConfig): for field in dataclasses.fields(SoftwareConfig):
match field.type: v = self.__getattribute__(field.name)
match v:
case Path(): case Path():
arg_d[field.name] = str(self.__getattribute__(field.name)) arg_d[field.name] = str(v)
case _: case _:
arg_d[field.name] = self.__getattribute__(field.name) arg_d[field.name] = v
SOFTWARE_CONFIG_PATH.parent.mkdir(exist_ok=True, parents=True)
SOFTWARE_CONFIG_PATH.write_text(json.dumps(arg_d, indent=4), encoding='utf-8') SOFTWARE_CONFIG_PATH.write_text(json.dumps(arg_d, indent=4), encoding='utf-8')

View File

@ -1,24 +1,33 @@
import logging import logging
import os import os
import subprocess import subprocess
import sys
from pathlib import Path from pathlib import Path
from PyQt6 import QtWidgets from PyQt6 import QtWidgets
import flandre import flandre
from flandre.config import C
from flandre.nodes.MainUI import MainUI from flandre.nodes.MainUI import MainUI
def kde_pyqt6_mainui(): def kde_pyqt6_mainui():
subprocess.run(['python', __file__], subprocess.run(['python', __file__, *sys.argv[1:]],
env=dict(XDG_CURRENT_DESKTOP="KDE", env=dict(XDG_CURRENT_DESKTOP="KDE",
XDG_RUNTIME_DIR="/run/user/1000", XDG_RUNTIME_DIR="/run/user/1000",
XDG_SESSION_TYPE="wayland", XDG_SESSION_TYPE="wayland",
PYTHONPATH=os.environ.get('PYTHONPATH', flandre.MODULE_FOLDER.parent), ) PYTHONPATH=os.environ.get('PYTHONPATH', flandre.MODULE_FOLDER.parent))
) )
if __name__ == '__main__': if __name__ == '__main__':
print(QtWidgets.QStyleFactory.keys()) if '--dev' in sys.argv:
print('qt styles:',QtWidgets.QStyleFactory.keys())
try:
idx = sys.argv.index('--data_folder')
C.data_folder = Path(sys.argv[idx + 1])
except ValueError:
pass
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
MainUI()() MainUI()()

View File

@ -67,6 +67,10 @@ class Adv(QMainWindow, Ui_MainWindow):
super(Adv, self).__init__(parent) super(Adv, self).__init__(parent)
self.p = p self.p = p
self.setupUi(self) self.setupUi(self)
# set default folder
self.l_base.setText(C.data_folder.__str__())
self.device_switch_state: LinkStatus = LinkStatus.RED self.device_switch_state: LinkStatus = LinkStatus.RED
icon = QtGui.QIcon() icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(str(ASSETS / 'switch_button.png'))) icon.addPixmap(QtGui.QPixmap(str(ASSETS / 'switch_button.png')))
@ -100,7 +104,6 @@ class Adv(QMainWindow, Ui_MainWindow):
# self.b_device_connected.clicked.connect(lambda: self.p.send(SetDeviceConnectedMsg(not self.device_connected))) # self.b_device_connected.clicked.connect(lambda: self.p.send(SetDeviceConnectedMsg(not self.device_connected)))
# self.c_live_seq_name.currentIndexChanged.connect(self.on_seq_meta) # self.c_live_seq_name.currentIndexChanged.connect(self.on_seq_meta)
self.b_live_seq_apply.clicked.connect(self.on_seq_meta) self.b_live_seq_apply.clicked.connect(self.on_seq_meta)
self.l_base.setText(C.data_folder.__str__())
self.l_base.textChanged.connect(lambda e: self.l_base.textChanged.connect(lambda e:
self.l_base.setStyleSheet("") self.l_base.setStyleSheet("")
if Path(e).exists() else if Path(e).exists() else
@ -450,7 +453,7 @@ class Adv(QMainWindow, Ui_MainWindow):
if msg.name == 'bscan' and msg.sender != 'ui': if msg.name == 'bscan' and msg.sender != 'ui':
self.cb_bscan.setChecked(msg.value) self.cb_bscan.setChecked(msg.value)
elif isinstance(msg, ImagingConfigNameListMsg): elif isinstance(msg, ImagingConfigNameListMsg):
print(msg, flush=True) # print(msg, flush=True) todo fix
self.c_imaging_config.clear() self.c_imaging_config.clear()
for name in msg.value: for name in msg.value:
self.c_imaging_config.addItem(name) self.c_imaging_config.addItem(name)

View File

@ -1,6 +1,8 @@
import dataclasses import dataclasses
import inspect import inspect
import sys
from enum import Enum from enum import Enum
from pathlib import Path, PosixPath
@dataclasses.dataclass @dataclasses.dataclass
@ -18,10 +20,28 @@ class EE(Enum):
x=1 x=1
if __name__ == '__main__': if __name__ == '__main__':
print(sys.argv)
# print(dir(ASD())) # print(dir(ASD()))
# print(ASD.__dict__) # print(ASD.__dict__)
# print(inspect.getmembers(ASD)) # print(inspect.getmembers(ASD))
# print(inspect.getmembers(ASD)) # print(inspect.getmembers(ASD))
# for f in dataclasses.fields(ASD): # for f in dataclasses.fields(ASD):
# print(f.name, f.type) # print(f.name, f.type)
print(EE.asd.value()) p = Path('asd')
pt = type(p)
print(pt)
print(pt.__name__)
print(type(type(p)))
match pt:
case _x if isinstance(_x, PosixPath):
print(-2)
case type(__name__='PosixPath'):
print(-1)
case type():
print(0)
case Path():
print(1)
case PosixPath():
print(3)
case _:
print(2)