diff --git a/plugin_gui.py b/plugin_gui.py index 1e931ef..7586303 100644 --- a/plugin_gui.py +++ b/plugin_gui.py @@ -50,6 +50,7 @@ def get_name() -> str: def get_description() -> str: return _('Lab Gui integration') + @classmethod def get_icon(self): return self.create_icon('mdi.chip') diff --git a/pylab_ml/gui/instruments/base_instrument.py b/pylab_ml/gui/instruments/base_instrument.py index 053a00a..3966f4c 100644 --- a/pylab_ml/gui/instruments/base_instrument.py +++ b/pylab_ml/gui/instruments/base_instrument.py @@ -34,7 +34,6 @@ """ import os -import qdarkstyle from PyQt5 import QtCore, QtWidgets, uic import qtawesome as qta from pylab_ml.misc.iasvg import InteractiveSvgWidget @@ -91,7 +90,7 @@ class Gui(object): def __init__(self, grandparent=None, name=None, parentwindow=None): """ Init the Gui, create a window and load the ui-file with the same name as the class. - + Parameters ---------- grandparent : object, optional @@ -126,7 +125,6 @@ def __init__(self, grandparent=None, name=None, parentwindow=None): self.mqtt_initlist = [] self.mqtt_cmds = [] self.publish("mqtt_status", "connect") # I'm alive - window.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) # self.gui.myframe.setEnabled(True) def adjustUI(self): @@ -151,7 +149,7 @@ def adjustUI(self): def add_menue(self, menue, connect, enabled, checkable=False, checked=False): """ Add a menue item to Setup - + Parameters ---------- menue : string @@ -211,7 +209,7 @@ def retranslateUi(self, Form): def setLabel(self, Label, value, ext=None): """ Set the text of a label. - + Parameters ---------- Label : object @@ -234,7 +232,7 @@ def setLabel(self, Label, value, ext=None): def set_Geometry(self, geometry): """ Set the geometry of the GUI, check if the geometry is on the actual screen. - + Parameters ---------- geometry : tuple @@ -274,7 +272,7 @@ def filtersubtopic(self, value): def unitOfMeasurement(self, value, unit=None): """ Convert a value with a unit to its numerical representation. - + Parameters ---------- value : string @@ -311,12 +309,12 @@ def objectName2mqttName(self, name): = MQTT_set_I_limit -> I_limit listen only on set = MQTT_get_I_limit -> I_limit listen only on get = TAB_ch -> Name for a tab-name - + Parameters ---------- name : string The object name to be filtered. - + Returns ------- listen : string @@ -350,7 +348,7 @@ def objectName2mqttName(self, name): def mqttreceive(self, instName, msg, check=False): """ Common MQTT receive messages, get raw MQTT data for receiving more information. - + Parameters ---------- instName : string @@ -359,12 +357,12 @@ def mqttreceive(self, instName, msg, check=False): The MQTT message received, expected to have keys "cmd", "payload", and "type". check : bool, optional If True, only process the message if the command is in self.mqtt_cmds. The default is False. - + Returns ------- result : bool True if the message was processed successfully, False otherwise. - """ + """ self.dprint(f' {instName}.mqttreceive from base class: search {msg["cmd"]}') result = False if "cmd" in tuple(msg.keys()) and "payload" in tuple(msg.keys()) and (msg["cmd"] in self.mqtt_cmds or not check): @@ -532,7 +530,7 @@ def mqttConnectSVGWidget(self, filename, name, channel=None): """ Create an InteractiveSvgWidget and load the filname. Connect all clicks to the text id's to the function svg2mqtt(). - + Parameters ---------- filename : string @@ -541,7 +539,7 @@ def mqttConnectSVGWidget(self, filename, name, channel=None): The base name for the widget, used for MQTT topic construction. channel : string, optional An optional channel identifier to be appended to the name for MQTT topic construction. The default is None. - + Returns ------- svgWidget : InteractiveSvgWidget @@ -598,7 +596,7 @@ def status(self, value): def publish(self, cmd, value="", instName=None): """ Publish a command and value over MQTT. - + Parameters ---------- cmd : string @@ -617,12 +615,12 @@ def publish(self, cmd, value="", instName=None): def gui2mqtt(self, widget): """ Function connect a Gui-widget to mqtt, it sends a mqtt set command with the value from the Gui-widget. - + Parameters ---------- widget : QtWidgets.QWidget The GUI widget that triggered the MQTT command, expected to have an objectName that follows the - + Returns ------- None. @@ -650,7 +648,7 @@ def svg2mqtt(self, name, value): """ Publish the name and value over mqtt. Overwrite this function if you need a more complex form. - + Parameters ---------- name : string diff --git a/pylab_ml/gui/instruments/coil/coil_3a.py b/pylab_ml/gui/instruments/coil/coil_3a.py index 4ff76c0..9259e1f 100644 --- a/pylab_ml/gui/instruments/coil/coil_3a.py +++ b/pylab_ml/gui/instruments/coil/coil_3a.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ -This script defines a GUI class for a coil instrument, which is part of the PyLab-ML project. -The GUI allows users to interact with the coil instrument, send MQTT commands, and receive updates. +This script defines a GUI class for a coil instrument, which is part of the PyLab-ML project. +The GUI allows users to interact with the coil instrument, send MQTT commands, and receive updates. The class inherits from a base instrument GUI class and implements specific functionality for the coil instrument. Created on Mon Jan 3 09:19:17 2022 @@ -11,7 +11,6 @@ """ import sys -import qdarkstyle # import numpy as np import os @@ -45,7 +44,7 @@ class Gui(Guibase): def __init__(self, parent=None, name="scope", parentwindow=None, channel=None): """ Initialize the GUI for the coil instrument. - + Parameters ---------- parent: object, optional @@ -97,7 +96,7 @@ def mqttMeasureEvent(self, event): def mqttreceive(self, instName, msg): """ Handle incoming MQTT messages and update the GUI accordingly. - + Parameters ---------- instName: str @@ -176,7 +175,6 @@ def smustatus(self, msg): # mqttclient.init() app = QtWidgets.QApplication(sys.argv) - app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) window = Gui(app) app.exec_() # window.scope.anim.event_source.stop() diff --git a/pylab_ml/gui/instruments/matrix/matrix.py b/pylab_ml/gui/instruments/matrix/matrix.py index e978895..7383663 100644 --- a/pylab_ml/gui/instruments/matrix/matrix.py +++ b/pylab_ml/gui/instruments/matrix/matrix.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -This script defines a GUI class for a matrix instrument, which is part of the PyLab-ML project. +This script defines a GUI class for a matrix instrument, which is part of the PyLab-ML project. The GUI allows users to interact with the matrix instrument, send MQTT commands, and receive updates. Created on Fri Jul 10 13:43:20 2020 @@ -20,7 +20,6 @@ # farbige Darstellung von connections und wire # kleinere Darstellung der Matrix .... # -import qdarkstyle import numpy as np import os from PyQt5 import QtCore, QtGui, QtWidgets @@ -38,7 +37,7 @@ class VerticalLabel(QLabel): """ VerticalLabel is a custom QLabel that displays text vertically. It overrides the paintEvent to rotate the text. """ - + def __init__(self, *args): """Initialize the VerticalLabel.""" QLabel.__init__(self, *args) @@ -82,7 +81,7 @@ class Gui(Guibase): def __init__(self, parent=None, name="matrix", parentwindow=None): """ Initialize the GUI for the matrix instrument. - + Parameters ---------- parent: QWidget, optional @@ -159,7 +158,7 @@ def myadjustUI(self): def create_CBox(self, index): """ Create a combo box and its associated label for the given index. - + Parameters ---------- index: int @@ -225,7 +224,7 @@ def update_mainwindow(self): def update_CBox(self, index, name, color): """ Update the combo box and its associated label for the given index, name, and color. - + Parameters ---------- index: int @@ -286,7 +285,6 @@ def show_matrix(self): self.lineEdit.source_object = None self.matrix_window = matrix_window self.matrix_window.nets = nets - matrix_window.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) matrix_window.setMinimumSize( self.X_OFFSET + (self.x_max + 1) * self.X_STEP + self.X_RLABELWIDTH + 30, self.Y_OFFSET + self.Y_TLABELHIGH + self.y_max * self.Y_STEP + self.Y_BLABELHIGH + 30, @@ -327,12 +325,12 @@ def update_matrixcolor(self): def color_inaktiv(self, color): """ Calculate the inactive color based on the given color and the COLOR_INAKTIV factor. - + Parameters ---------- color : tuple The RGB color to be modified. - + Returns ------- result : tuple @@ -345,14 +343,14 @@ def color_inaktiv(self, color): def get_nets(self, categorie, scenario): """ Get the nets for a given category and scenario from the connection table. - + Parameters ---------- categorie : str The category of the nets. scenario : str The scenario of the nets. - + Returns ------- color : tuple @@ -374,7 +372,7 @@ def get_nets(self, categorie, scenario): def create_net(self, form, x, y): """ Create a radio button representing a net at the given x and y coordinates. - + Parameters ---------- form : QWidget @@ -383,7 +381,7 @@ def create_net(self, form, x, y): The x-coordinate of the net. y : int The y-coordinate of the net. - + Returns ------- radioButton : QRadioButton @@ -415,7 +413,7 @@ def create_label(self, form, x, y, text=None): x== -2 -> place wire text right y== -1 -> pace wire number at top vertical y== -2 -> pace wire text at bottom vertical - + Parameters ---------- form : QWidget @@ -430,7 +428,7 @@ def create_label(self, form, x, y, text=None): -2: place wire text at the bottom text : str, optional The text to display on the label. If None, default text will be used based on the coordinates. - + Returns ------- label : QLabel @@ -500,7 +498,7 @@ def create_label(self, form, x, y, text=None): def edit_label(self, event, source_object=None): """ Handle the mouse press event on a label to allow editing of the label's text. - + Parameters ---------- event : QMouseEvent @@ -508,7 +506,7 @@ def edit_label(self, event, source_object=None): source_object : QLabel, optional The label that was clicked, triggering the edit. If None, the event's source will be used. """ - + if self.lineEdit.source_object is not None: self.editfinish_label() if event.button() == 1: @@ -528,7 +526,7 @@ def editfinish_label(self): def create_line(self, form, x, y): """ Create a line (horizontal or vertical) in the given form. - + Parameters ---------- form : QWidget @@ -537,7 +535,7 @@ def create_line(self, form, x, y): The x-coordinate or special value indicating a horizontal line (-1). y : int The y-coordinate or special value indicating a vertical line (-1). - + Returns ------- line : QFrame @@ -580,7 +578,7 @@ def retranslateUi(self, Form): def mqttreceive(self, instName, msg): """ Handle incoming MQTT messages and update the GUI elements accordingly. - + Parameters ---------- instName : str @@ -839,7 +837,6 @@ def discardTable(self): # mqttclient.init() app = QtWidgets.QApplication(sys.argv) - app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) window = Gui(app) app.exec_() # window.scope.anim.event_source.stop() diff --git a/pylab_ml/gui/instruments/minisct/minisct.py b/pylab_ml/gui/instruments/minisct/minisct.py index 43b3989..1b56a7d 100644 --- a/pylab_ml/gui/instruments/minisct/minisct.py +++ b/pylab_ml/gui/instruments/minisct/minisct.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ -This script defines a GUI class for the MiniSCT instrument, which is part of the PyLab-ML project. -The GUI allows users to interact with the MiniSCT instrument, send MQTT commands, and receive updates. +This script defines a GUI class for the MiniSCT instrument, which is part of the PyLab-ML project. +The GUI allows users to interact with the MiniSCT instrument, send MQTT commands, and receive updates. The class inherits from a base instrument GUI class and implements specific functionality for the MiniSCT instrument. Created on Mon Jan 3 09:19:17 2022 @@ -12,7 +12,6 @@ """ import sys -import qdarkstyle import os from PyQt5 import QtWidgets import qtawesome as qta @@ -104,7 +103,7 @@ class Gui(Guibase): def __init__(self, parent, name="miniSCT", parentwindow=None, channel=None): """ Initialize the GUI for the MiniSCT instrument. - + Parameters ---------- parent: object @@ -218,7 +217,7 @@ def myadjustUI(self): def mqttreceive(self, instName, msg): """ Common MQTT receive messages, get raw MQTT data for more information. - + Parameters ---------- instName: str @@ -273,7 +272,7 @@ def svg2mqtt(self, name, value): """ Overwrite from the base_instrument.svg2mqtt. Translate svg-names to his mqtt command. - + Parameters ---------- name: str @@ -314,7 +313,6 @@ def close(self, event=None): mqttclient.init() app = QtWidgets.QApplication(sys.argv) - app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) window = Gui(app) app.exec_() # window.scope.anim.event_source.stop() diff --git a/pylab_ml/gui/instruments/regs/registermaster.py b/pylab_ml/gui/instruments/regs/registermaster.py index 3e31453..9ba90b4 100644 --- a/pylab_ml/gui/instruments/regs/registermaster.py +++ b/pylab_ml/gui/instruments/regs/registermaster.py @@ -12,7 +12,6 @@ """ import sys -import qdarkstyle # import numpy as np import os @@ -50,7 +49,7 @@ class Gui(Guibase): def __init__(self, parent=None, name="reg", parentwindow=None, channel=None): """ Initialize the GUI for the registermaster. - + Parameters ---------- parent: QWidget, optional @@ -108,7 +107,7 @@ def regstatus(self, msg): def mqttreceive(self, instName, msg): """ Common MQTT receive messages, get raw MQTT data for more information. - + Parameters ---------- instName: str @@ -139,7 +138,7 @@ def mqttreceive(self, instName, msg): def registerframe(self, register, value): """ Update the register frame in the GUI with the given register and value. - + Parameters ---------- register: Register @@ -166,7 +165,7 @@ def registerframe(self, register, value): self.show_regs.append(QtWidgets.QGroupBox(self.myframe)) myregister = self.show_regs[-1] load_ui(myregister, os.path.join(os.path.dirname(__file__), "register.ui")) # QBregister - myregister.Bhold.setIcon(qta.icon("fa5s.thumbtack", color="white", scale_factor=1.0, color_active="orange")) + myregister.Bhold.setIcon(qta.icon("fa5s.thumbtack", color="grey", scale_factor=1.0, color_active="orange")) myregister.Bhold.clicked.connect(lambda: self.toggleBhold(myregister.Bhold)) # self.myframe.Name.mousePressEvent = self.readreg(register._name) self.myframe.QVBregisters.addWidget(myregister) @@ -293,9 +292,9 @@ def openexcel(self): def toggleBhold(self, hold): """Toggle the state of the hold button and update its icon accordingly.""" if hold.isChecked(): - hold.setIcon(qta.icon("fa5s.thumbtack", color="orange", scale_factor=1.0, color_active="white")) + hold.setIcon(qta.icon("fa5s.thumbtack", color="orange", scale_factor=1.0, color_active="grey")) else: - hold.setIcon(qta.icon("fa5s.thumbtack", color="white", scale_factor=1.0, color_active="orange")) + hold.setIcon(qta.icon("fa5s.thumbtack", color="grey", scale_factor=1.0, color_active="orange")) def showregdoc(self): """Show or hide the documentation for all registers based on the state of the corresponding actions.""" @@ -325,7 +324,6 @@ def readreg(self, regname): # mqttclient.init() app = QtWidgets.QApplication(sys.argv) - app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) window = Gui(app) app.exec_() diff --git a/pylab_ml/gui/instruments/smu/smu.py b/pylab_ml/gui/instruments/smu/smu.py index 8c5624f..f6e4b8f 100644 --- a/pylab_ml/gui/instruments/smu/smu.py +++ b/pylab_ml/gui/instruments/smu/smu.py @@ -11,7 +11,6 @@ """ import sys -import qdarkstyle # import numpy as np import os @@ -47,7 +46,7 @@ class Gui(Guibase): def __init__(self, parent=None, name="scope", parentwindow=None, channel=None): """ Initialize the GUI for the SMU instrument. - + Parameters ---------- parent : QWidget, optional @@ -114,7 +113,7 @@ def mqttMeasureEvent(self, event): def mqttreceive(self, instName, msg): """ Common MQTT receive messages, get raw MQTT data for more information. - + Parameters ---------- instName : str @@ -289,7 +288,6 @@ def sweep(self, b): # mqttclient.init() app = QtWidgets.QApplication(sys.argv) - app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) window = Gui(app) app.exec_() # window.scope.anim.event_source.stop() diff --git a/pylab_ml/gui/instruments/softscope/softscope.py b/pylab_ml/gui/instruments/softscope/softscope.py index a7613be..0c2ac0b 100644 --- a/pylab_ml/gui/instruments/softscope/softscope.py +++ b/pylab_ml/gui/instruments/softscope/softscope.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ -This script defines a GUI class for a softscope instrument, which is part of the PyLab-ML project. -The GUI allows users to interact with the softscope instrument, send MQTT commands, and receive updates. +This script defines a GUI class for a softscope instrument, which is part of the PyLab-ML project. +The GUI allows users to interact with the softscope instrument, send MQTT commands, and receive updates. The class inherits from a base instrument GUI class and implements specific functionality for the softscope instrument. Created on Wed April 21 13:43:20 2021 @@ -12,9 +12,7 @@ """ import sys -import qdarkstyle -# import numpy as np import os from PyQt5 import QtWidgets, QtGui from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas @@ -31,7 +29,7 @@ class Scope(FigureCanvas): """ Scope class for the softscope instrument, responsible for plotting data in real-time. - It uses Matplotlib to create a dynamic plot that updates with new data points. + It uses Matplotlib to create a dynamic plot that updates with new data points. The class handles the initialization of the plot, updating the data, and adjusting the axes as needed. """ @@ -40,7 +38,7 @@ class Scope(FigureCanvas): def __init__(self, gui, frame=None, width=5, height=5, dpi=100, min_y=None, max_y=None, bgcolor=None): """ Initialize the Scope class with the given parameters and set up the Matplotlib figure and axes for plotting. - + Parameters ---------- gui: object @@ -75,9 +73,9 @@ def __init__(self, gui, frame=None, width=5, height=5, dpi=100, min_y=None, max_ FigureCanvas.__init__(self, fig) self.setParent(frame.scope) self.ax = pyplot.axes(xlim=(0, self.max_x), ylim=(self.min_y, self.max_y)) - self.ax.tick_params(colors="white", which="both") - self.ax.xaxis.label.set_color("white") - self.ax.yaxis.label.set_color("white") + self.ax.tick_params(colors="gray", which="both") + self.ax.xaxis.label.set_color("gray") + self.ax.yaxis.label.set_color("gray") self.ax.grid() self.ax.set_xlabel("samples") # time (s) (self.line,) = self.ax.plot([], [], lw=2) @@ -255,7 +253,7 @@ class Gui(Guibase): def __init__(self, parent=None, name="softscope", parentwindow=None, channel=None): """ Initialize the GUI for the softscope instrument. - + Parameters ---------- parent: object, optional @@ -300,7 +298,7 @@ def myadjustUI(self): def mqttreceive(self, instName, msg): """ Handle incoming MQTT messages for the softscope instrument. - + Parameters ---------- instName: str @@ -383,7 +381,6 @@ def close(self, event=None): # mqttclient.init() app = QtWidgets.QApplication(sys.argv) - app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) window = Gui(app) app.exec_() # window.scope.anim.event_source.stop() diff --git a/pylab_ml/gui/instruments/template_instrument.py b/pylab_ml/gui/instruments/template_instrument.py index 215614d..5e01829 100644 --- a/pylab_ml/gui/instruments/template_instrument.py +++ b/pylab_ml/gui/instruments/template_instrument.py @@ -7,7 +7,6 @@ """ import sys -import qdarkstyle # import numpy as np import os from PyQt5 import QtWidgets @@ -17,6 +16,7 @@ __author__ = "Zlin526F" __credits__ = ["Zlin526F"] __email__ = "Zlin526F@github" +__version__ = "0.0.0" class Gui(Guibase): @@ -36,9 +36,9 @@ class Gui(Guibase): } def __init__(self, parent=None, name='scope', channel=None): - """ - Initialize the GUI, load the UI file, adjust the UI elements, and set up MQTT connections. - + """ + Initialize the GUI, load the UI file, adjust the UI elements, and set up MQTT connections. + Parameters ---------- parent : object, optional @@ -82,7 +82,7 @@ def myadjustUI(self): def mqttreceive(self, instName, msg): """ Common MQTT receive messages, get raw MQTT data for more information. - + Parameters ---------- instName : str @@ -128,7 +128,6 @@ def close(self, event=None): # mqttclient.init() app = QtWidgets.QApplication(sys.argv) - app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) window = Gui(app) app.exec_() # window.scope.anim.event_source.stop() diff --git a/pylab_ml/widgets/buttons.py b/pylab_ml/widgets/buttons.py index ea78ce1..e828480 100644 --- a/pylab_ml/widgets/buttons.py +++ b/pylab_ml/widgets/buttons.py @@ -9,8 +9,6 @@ import subprocess import importlib from time import sleep -import qtawesome as qta -from qtpy.QtCore import Signal from PyQt5 import QtWidgets, QtCore from pydantic import BaseModel from pylab_ml.common.common import kill_proc_tree @@ -37,7 +35,7 @@ class Button(QtWidgets.QToolButton): sytle_button = {'disabled': "color: rgb(128, 128, 128);", 'crash': "color: rgb(255, 64, 64);", - 'instance_ok': "color: rgb(240, 240, 240);", + 'instance_ok': "color: rgb(200, 200, 200);", 'available': "color: rgb(64, 164, 64);", 'connect': "color: rgb(64, 164, 64);", 'disconnect': "color: rgb(255, 64, 64);", @@ -55,6 +53,7 @@ def __init__(self, parent, instanceName, name, index): self.setGeometry(QtCore.QRect(10, 10, 88, 60)) self.setIconSize(QtCore.QSize(40, 40)) + self.setAutoRaise(True) self.guiLib = '' self.guiLibImport = None self.instance = None diff --git a/pylab_ml/widgets/gui_widget.py b/pylab_ml/widgets/gui_widget.py index d9c2258..c271392 100644 --- a/pylab_ml/widgets/gui_widget.py +++ b/pylab_ml/widgets/gui_widget.py @@ -15,7 +15,6 @@ import os import time import qtawesome as qta -import qdarkstyle from PyQt5 import uic from qtpy.QtCore import Signal from PyQt5 import QtWidgets, QtCore @@ -23,10 +22,6 @@ from qtpy.QtWidgets import QHBoxLayout from spyder.api.translations import get_translation -if __name__ == "__main__": - import sys - from PyQt5.QtWidgets import QApplication - app = QApplication(sys.argv) from spyder.api.widgets.main_widget import PluginMainWidget from ate_projectdatabase.Utils import DB_KEYS from ate_projectdatabase.FileOperator import DBObject, FileOperator @@ -97,7 +92,6 @@ def __init__(self, name, plugin, parent=None): self.plugin = plugin self.gui = LabGuiDialog() self.adjustUI() - self.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) self.closeEvent = self.close self.reset() self.project_info = None @@ -318,31 +312,3 @@ def __del__(self): def debug_stop(self): ''' do update the state of lab gui when the test application is stoped ''' pass - - -if __name__ == "__main__": - from ate_spyder.widgets.navigation import ProjectNavigation - from PyQt5.QtWidgets import QApplication - from qtpy.QtWidgets import QMainWindow - import sys - - QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts) - app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) - app.references = set() - main = QMainWindow() - homedir = os.path.expanduser("~") - project_directory = homedir + r'\ATE\packages\envs\semi-ate-awinia1\HATB' # path to your semi-ate project - project_directory = homedir + r'\Work Folders\Projecte\Repository\hatc\0203\units\lab\source\python\HATC' - project_info = ProjectNavigation(project_directory, homedir, main) - project_info.active_hardware = 'HW0' - project_info.active_base = 'FT' - project_info.active_target = 'Device1' - - main.NAME = 'lab_gui' - main.WIDGET_CLASS = LabGui - main.CONF_SECTION = main.NAME - - labgui = LabGui('Lab Gui', main, main) - labgui.setup_widget(project_info) - main.show() - sys.exit(app.exec_())