From 8e92a4b47e29538f2592e6678101e16e09197043 Mon Sep 17 00:00:00 2001 From: David Rice Date: Wed, 7 Jan 2026 11:47:54 +0000 Subject: [PATCH] Added basic GUI --- __pycache__/ui_connerror.cpython-312.pyc | Bin 0 -> 3891 bytes __pycache__/ui_mainwindow.cpython-312.pyc | Bin 0 -> 10749 bytes __pycache__/ui_scanning.cpython-312.pyc | Bin 0 -> 2622 bytes appbackground.jpg | Bin 0 -> 23390 bytes arriveico.png | Bin 0 -> 13469 bytes darkblue-led.png | Bin 0 -> 8489 bytes fail.png | Bin 0 -> 31321 bytes gray-led.png | Bin 0 -> 7703 bytes green-led.png | Bin 0 -> 8271 bytes ligthblue-led.png | Bin 0 -> 7830 bytes main.py | 245 ++++++++++++++++++++++ main.spec | 54 +++++ pass.png | Bin 0 -> 30034 bytes red-led.png | Bin 0 -> 8045 bytes test.py | 39 ++++ test_eth.py | 18 ++ ui_connerror.py | 66 ++++++ ui_mainwindow.py | 170 +++++++++++++++ ui_scanning.py | 41 ++++ 19 files changed, 633 insertions(+) create mode 100644 __pycache__/ui_connerror.cpython-312.pyc create mode 100644 __pycache__/ui_mainwindow.cpython-312.pyc create mode 100644 __pycache__/ui_scanning.cpython-312.pyc create mode 100644 appbackground.jpg create mode 100644 arriveico.png create mode 100644 darkblue-led.png create mode 100644 fail.png create mode 100644 gray-led.png create mode 100644 green-led.png create mode 100644 ligthblue-led.png create mode 100644 main.py create mode 100644 main.spec create mode 100644 pass.png create mode 100644 red-led.png create mode 100644 test.py create mode 100644 test_eth.py create mode 100644 ui_connerror.py create mode 100644 ui_mainwindow.py create mode 100644 ui_scanning.py diff --git a/__pycache__/ui_connerror.cpython-312.pyc b/__pycache__/ui_connerror.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ffa66cb8c7aeb2f3bb075faeaeeb0a484d93b1dd GIT binary patch literal 3891 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 a;o?~?p5fx(If7QpoaNX4|K@0hBK{qa5N+iE literal 0 HcmV?d00001 diff --git a/__pycache__/ui_scanning.cpython-312.pyc b/__pycache__/ui_scanning.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b482186189482d3a8520e1935050a725a91f14d8 GIT binary patch literal 2622 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 literal 0 HcmV?d00001 diff --git a/arriveico.png b/arriveico.png new file mode 100644 index 0000000000000000000000000000000000000000..ed9e56ecc2b0f0d1589a0f16fe0b5323b55c70db GIT binary patch literal 13469 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 literal 0 HcmV?d00001 diff --git a/darkblue-led.png b/darkblue-led.png new file mode 100644 index 0000000000000000000000000000000000000000..52e120b64e5e605d894182141dc0665c06771053 GIT binary patch literal 8489 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 z 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 literal 0 HcmV?d00001 diff --git a/gray-led.png b/gray-led.png new file mode 100644 index 0000000000000000000000000000000000000000..5c56f9e9cc465a825136ff818dba21990e46926d GIT binary patch literal 7703 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

jOyh4?TxJ`(Mss~4z8pmW9id1X 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 literal 0 HcmV?d00001 diff --git a/ligthblue-led.png b/ligthblue-led.png new file mode 100644 index 0000000000000000000000000000000000000000..4e63bab262de0d796e1317bb016e8898d277e5dc GIT binary patch literal 7830 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 P7JzrMs?b^)v#|dIrA62h literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..3a24e52 --- /dev/null +++ b/main.py @@ -0,0 +1,245 @@ +#!/user/bin/env python3 +""" +AUTOMOTIVE POWER SIMULATOR APP - MAIN.PY +- ENTRY POINT OF APPLICATION + +VERSION: 1.0 + +AUTHOR: D. RICE 14/11/2025 +© 2025 ARRIVE +""" + +# Imports +import sys +from PySide6.QtWidgets import (QApplication, QDialog, QMainWindow) +from PySide6.QtCore import (QThread, QObject, Signal, Slot) + +import time + +from ui_mainwindow import Ui_MainWindow +from ui_scanning import Ui_scanningDialog +from ui_connerror import Ui_connerrorDialog + + +# Scanning Window Class +class ScanningWindow(QDialog): + def __init__(self, parent=None): + # Initialise print window + super(ScanningWindow, self).__init__(parent) + # Finish print window initial setup + self.ui = Ui_scanningDialog() + self.ui.setupUi(self) + + +# No device warning Window Class +class NoDeviceWindow(QDialog): + def __init__(self, parent=None): + # Initialise print window + super(NoDeviceWindow, self).__init__(parent) + # Finish print window initial setup + self.ui = Ui_connerrorDialog() + self.ui.setupUi(self) + + # Static method to create the dialog and return response + @staticmethod + def get_response(parent=None): + dialog = NoDeviceWindow(parent) + results = dialog.exec() + return results + + +# Main window class +class MainWindow(QMainWindow): + def __init__(self): + # Initialise main window + super(MainWindow, self).__init__() + + # Finish main window initial setup + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + + # Set up timer prototype + self.counter = 0 + + # Hold process reference. + self.p = None + + # Thread and Worker initialisation + self.worker_thread = None + self.worker = None + + # Add start button action + self.ui.connButton.setCheckable(True) + self.ui.connButton.clicked.connect(self.conn_button_press) + + # Set initial size + initial_width = 1024 + initial_height = 768 + + # Lock the window size by setting min/max to the same values + self.setMinimumSize(initial_width, initial_height) + self.setMaximumSize(initial_width, initial_height) + + self.setGeometry(0, 0, 1024, 768) + + self.setFixedSize(1024, 768) + + self.show() + + def conn_button_press (self): + global IDN_Response_flag + global Error_flag + + text_conn = self.ui.connButton.text() + + if text_conn == "CONNECT": + self.ui.connButton.setText("DISCONNECT") + + w = ScanningWindow(self) + w.show() + + QApplication.processEvents() + + # Run Connection actions here + #self.start_worker() + + while ((IDN_Response_flag == False) and (Error_flag == False)): + QApplication.processEvents() + + if IDN_Response_flag == True: + + w.close() + IDN_Response_flag = False + Error_flag = False + self.run_scope_setup() + + if Error_flag == True: + response = NoDeviceWindow.get_response(self) + self.ui.connButton.setText("CONNECT") + self.closeEvent() + + self.ui.manu.setText("---") + self.ui.model.setText("---") + self.ui.sn.setText("---") + self.ui.fw.setText("---") + + IDN_Response_flag = False + Error_flag = False + + QApplication.processEvents() + + else: + self.ui.connButton.setText("CONNECT") + self.closeEvent() + self.ui.manu.setText("---") + self.ui.model.setText("---") + self.ui.sn.setText("---") + self.ui.fw.setText("---") + + QApplication.processEvents() + + def run_scope_setup (self): + self.worker.run_setup() + + @Slot() + def start_worker(self): + # Create a QThread + self.worker_thread = QThread() + + #nCreate the worker QObject (Now created directly, no import needed) + self.worker = ScopeWorker() + + # Move the worker object to the thread + self.worker.moveToThread(self.worker_thread) + + # Connect Signals + self.worker_thread.started.connect(self.worker.run) + + self.worker.idn_signal.connect(self.handle_idn) + self.worker.data_ready_signal.connect(self.handle_data_ready) + self.worker.error_signal.connect(self.handle_error) + + # Clean-up connections + self.worker.finished_signal.connect(self.worker_thread.quit) + self.worker.finished_signal.connect(self.worker.deleteLater) + self.worker_thread.finished.connect(self.worker_thread.deleteLater) + + # Start the QThread, which triggers worker.run + self.worker_thread.start() + + @Slot() + def signal_acquisition(self): + """Sends the signal to the worker to start pulling data.""" + if self.worker: + self.log_text.append("Main: Sending START_ACQUISITION signal.") + self.status_label.setText("Status: Acquiring data...") + # This is safe because start_acquisition only sets a flag + self.worker.start_acquisition() + + # --- SLOTS: Receive data safely from the worker thread --- + + @Slot(str) + def handle_idn(self, idn_string): + global IDN_Response_flag + global Error_flag + + # Received the initial IDN from the worker + IDN_Response_flag = True + + # Split the string by the comma delimiter + components = idn_string.strip().split(',') + + # Split the string by the comma delimiter + components = idn_string.strip().split(',') + + if len(components) == 4: + # Assign the components to meaningful keys in a dictionary + parsed_data = { + "manufacturer": components[0], + "model": components[1], + "serial_number": components[2], + "firmware_version": components[3] + } + + self.ui.manu.setText(parsed_data.get("manufacturer")) + self.ui.model.setText(parsed_data.get("model")) + self.ui.sn.setText(parsed_data.get("serial_number")) + self.ui.fw.setText(parsed_data.get("firmware_version")) + + else: + Error_flag = True + + self.ui.manu.setText("---") + self.ui.model.setText("---") + self.ui.sn.setText("---") + self.ui.fw.setText("---") + + @Slot(str) + def handle_data_ready(self, data_snippet): + """Received the acquired data from the worker.""" + self.status_label.setText("Status: Data Ready. Waiting for next command.") + self.log_text.append(f"Main: Received Waveform Data Snippet:\n{data_snippet}") + + @Slot(str) + def handle_error(self, message): + global Error_flag + + Error_flag = True + + def closeEvent(self): + """Handle application close to stop the thread gracefully.""" + if self.worker_thread and self.worker_thread.isRunning(): + self.worker.stop() + # Wait a moment for the thread to clean up + self.worker_thread.wait(500) + +# Run main +if __name__ == '__main__': + # Launch main window + app = QApplication(sys.argv) + app.setStyle('Fusion') + window = MainWindow() + window.show() + app.exec() + + sys.exit() diff --git a/main.spec b/main.spec new file mode 100644 index 0000000..53beb69 --- /dev/null +++ b/main.spec @@ -0,0 +1,54 @@ +# -*- mode: python ; coding: utf-8 -*- +from PyInstaller.utils.hooks import copy_metadata + +datas = [] +datas += copy_metadata('nidaqmx') + + +block_cipher = None + + +a = Analysis( + ['main.py'], + pathex=[], + binaries=[], + datas=datas, + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) + +exe = EXE( + pyz, + a.scripts, + [], + exclude_binaries=True, + name='main', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) +coll = COLLECT( + exe, + a.binaries, + a.zipfiles, + a.datas, + strip=False, + upx=True, + upx_exclude=[], + name='main', +) diff --git a/pass.png b/pass.png new file mode 100644 index 0000000000000000000000000000000000000000..926ae4d6682e9a90cc813b1be1883c936038a833 GIT binary patch literal 30034 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 ZwQ{g#5?Jni7lR%IP*zZfRLGfs{6C49Z~y=R literal 0 HcmV?d00001 diff --git a/test.py b/test.py new file mode 100644 index 0000000..2a10f0a --- /dev/null +++ b/test.py @@ -0,0 +1,39 @@ +def parse_idn_response(idn_string): + """ + Parses the SCPI *IDN? response string into individual components. + + Args: + idn_string: The raw string received from the instrument. + Example: "Agilent Technologies,DSO80204B,MY46002160,05.30.0005" + + Returns: + A dictionary containing the manufacturer, model, serial number, + and firmware version. + """ + # Split the string by the comma delimiter + components = idn_string.strip().split(',') + + if len(components) == 4: + # Assign the components to meaningful keys in a dictionary + parsed_data = { + "manufacturer": components[0], + "model": components[1], + "serial_number": components[2], + "firmware_version": components[3] + } + return parsed_data + else: + # Handle cases where the string format is unexpected + print(f"Warning: Unexpected IDN string format. Expected 4 parts, got {len(components)}.") + return {"raw_response": idn_string, "components": components} + +# Example Usage: +response_string = "Agilent Technologies,DSO80204B,MY46002160,05.30.0005" +data = parse_idn_response(response_string) + +# Print the resulting dictionary +print(data) + +# You can access individual elements like this: +print(f"Manufacturer: {data.get('manufacturer')}") +print(f"Model: {data.get('model')}") \ No newline at end of file diff --git a/test_eth.py b/test_eth.py new file mode 100644 index 0000000..399f45e --- /dev/null +++ b/test_eth.py @@ -0,0 +1,18 @@ +import vxi11 + +class DSO80204B(vxi11.Instrument): + def __init__(self, host, *args, **kwargs): + super(DSO80204B, self).__init__(host, *args, **kwargs) + def get_identification(self): + return self.ask("*IDN?") + + +def main(): + + # Get scope + instrument = DSO80204B('192.168.45.2') + + print (instrument.get_identification()) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/ui_connerror.py b/ui_connerror.py new file mode 100644 index 0000000..4f24d3a --- /dev/null +++ b/ui_connerror.py @@ -0,0 +1,66 @@ +from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, Qt) +from PySide6.QtGui import (QFont) +from PySide6.QtWidgets import (QDialogButtonBox, QLabel) + +class Ui_connerrorDialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(320, 160) + + # Set the window flags to remove the title bar + Dialog.setWindowFlags(Qt.WindowType.FramelessWindowHint) + + font = QFont() + font.setFamilies([u"Optimism Sans"]) + font.setPointSize(8) + font.setBold(True) + Dialog.setFont(font) + + dialog_style_sheet = f""" + QDialog {{ + background-image: url(""); + background-color: #FF80D4; + border: 1px solid #FF33BB; + border-radius: 10px; + }} + """ + + Dialog.setStyleSheet(dialog_style_sheet) + + self.buttonBox = QDialogButtonBox(Dialog) + self.buttonBox.setObjectName(u"buttonBox") + self.buttonBox.setFont(font) + self.buttonBox.setGeometry(QRect(10, 120, 300, 30)) + self.buttonBox.setOrientation(Qt.Horizontal) + self.buttonBox.setStandardButtons(QDialogButtonBox.Ok) + self.buttonBox.setCenterButtons(True) + + button_style = """ + QPushButton { + background-color: #FF80D4; + border: 1px solid #FF33BB; + border-radius: 1px; + padding: 10px 20px 10px 20px; + } + """ + + self.buttonBox.setStyleSheet(button_style) + + self.label = QLabel(Dialog) + self.label.setObjectName(u"label") + self.label.setFont(font) + self.label.setGeometry(QRect(10, 40, 300, 50)) + self.label.setAlignment(Qt.AlignCenter) + self.label.setWordWrap(True) + + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + + QMetaObject.connectSlotsByName(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + self.label.setText(QCoreApplication.translate("Dialog", u"COULDN'T CONNECT TO DSO80204B", None)) + # retranslateUi \ No newline at end of file diff --git a/ui_mainwindow.py b/ui_mainwindow.py new file mode 100644 index 0000000..b46fe29 --- /dev/null +++ b/ui_mainwindow.py @@ -0,0 +1,170 @@ +# -*- coding: utf-8 -*- + +from PySide6.QtCore import (QCoreApplication, QMetaObject, QRect, Qt) +from PySide6.QtGui import (QBrush, QColor, QFont, QIcon, QPalette, QPixmap, QFontDatabase) +from PySide6.QtWidgets import (QCheckBox, QFrame, QLabel, QProgressBar, QSlider, QPushButton, QWidget, QVBoxLayout) + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + + MainWindow.setToolButtonStyle(Qt.ToolButtonIconOnly) + MainWindow.setAnimated(True) + MainWindow.setDocumentMode(False) + MainWindow.setWindowIcon(QIcon('/home/davidrice/Python/Automotive-Power-Simulator-App/arriveico.png')) + fontmain = QFont() + fontmain.setFamilies([u"Optimism Sans"]) + fontmain.setPointSize(8) + fontmain.setBold(True) + + MainWindow.setFont(fontmain) + # Ensure the path is correct for your system! + image_path = "/home/davidrice/Python/Automotive-Power-Simulator-App/appbackground.jpg" # Example Path + + # --- Define and Apply the Style Sheet --- + bg_style_sheet = f""" + QWidget {{ + background-image: url("{image_path}"); + background-repeat: no-repeat; + background-position: center; + }} + """ + + self.centralwidget = QWidget(MainWindow) + self.centralwidget.setObjectName(u"centralwidget") + self.centralwidget.setStyleSheet(bg_style_sheet) + self.header = QLabel(self.centralwidget) + self.header.setObjectName(u"header") + self.header.setGeometry(QRect(50, 35, 650, 50)) + font = QFont() + font.setFamilies([u"Optimism Sans"]) + font.setPointSize(24) + font.setBold(True) + + self.header.setFont(font) + self.header.setStyleSheet("color: #5F016F;") + self.header.setAlignment(Qt.AlignCenter) + + self.test_area = QFrame(self.centralwidget) + self.test_area.setObjectName(u"test_area") + self.test_area.setGeometry(QRect(50, 115, 924, 618)) + self.test_area.setFrameShape(QFrame.StyledPanel) + self.test_area.setFrameShadow(QFrame.Raised) + + button_style = """ + QPushButton { + background-color: #FF80D4; + border: 1px solid #FF33BB; + border-radius: 1px; + } + """ + + self.connButton = QPushButton(self.test_area) + self.connButton.setObjectName(u"connButton") + self.connButton.setGeometry(QRect(25, 25, 125, 25)) + self.connButton.setStyleSheet(button_style) + + text_label_style = """ + QLabel { + background-image: url(""); + background-color: #FF80D4; + border: 0px solid #FF33BB; + border-radius: 0px; + } + """ + + self.manuLabel = QLabel(self.test_area) + self.manuLabel.setObjectName(u"manuLabel") + self.manuLabel.setGeometry(QRect(200, 5, 250, 15)) + self.manuLabel.setAlignment(Qt.AlignCenter) + self.manuLabel.setStyleSheet(text_label_style) + + label_style = """ + QLabel { + background-image: url(""); + background-color: #FF80D4; + border: 1px solid #FF33BB; + border-radius: 1px; + } + """ + + self.manu = QLabel(self.test_area) + self.manu.setObjectName(u"manu") + self.manu.setGeometry(QRect(200, 25, 250, 25)) + self.manu.setAlignment(Qt.AlignCenter) + self.manu.setStyleSheet(label_style) + + self.modelLabel = QLabel(self.test_area) + self.modelLabel.setObjectName(u"modelLabel") + self.modelLabel.setGeometry(QRect(475, 5, 125, 15)) + self.modelLabel.setAlignment(Qt.AlignCenter) + self.modelLabel.setStyleSheet(text_label_style) + + self.model = QLabel(self.test_area) + self.model.setObjectName(u"model") + self.model.setGeometry(QRect(475, 25, 125, 25)) + self.model.setAlignment(Qt.AlignCenter) + self.model.setStyleSheet(label_style) + + self.snLabel = QLabel(self.test_area) + self.snLabel.setObjectName(u"snlabel") + self.snLabel.setGeometry(QRect(625, 5, 125, 15)) + self.snLabel.setAlignment(Qt.AlignCenter) + self.snLabel.setStyleSheet(text_label_style) + + self.sn = QLabel(self.test_area) + self.sn.setObjectName(u"sn") + self.sn.setGeometry(QRect(625, 25, 125, 25)) + self.sn.setAlignment(Qt.AlignCenter) + self.sn.setStyleSheet(label_style) + + self.fwLabel = QLabel(self.test_area) + self.fwLabel.setObjectName(u"fwLabel") + self.fwLabel.setGeometry(QRect(775, 5, 125, 15)) + self.fwLabel.setAlignment(Qt.AlignCenter) + self.fwLabel.setStyleSheet(text_label_style) + + self.fw = QLabel(self.test_area) + self.fw.setObjectName(u"fw") + self.fw.setGeometry(QRect(775, 25, 125, 25)) + self.fw.setAlignment(Qt.AlignCenter) + self.fw.setStyleSheet(label_style) + + + frame_style = """ + QFrame { + background-image: url(""); + background-color: #FF80D4; + border: 1px solid #FF33BB; + border-radius: 10px; + } + """ + self.test_area.setStyleSheet(frame_style) + + MainWindow.setCentralWidget(self.centralwidget) + self.header.raise_() + self.test_area.raise_() + + self.retranslateUi(MainWindow) + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"AUTOMOTIVE POWER SIMULATOR V1.0", + None)) + self.header.setText(QCoreApplication.translate("MainWindow", u"AUTOMOTIVE POWER SIMULATOR", None)) + self.connButton.setText(QCoreApplication.translate("MainWindow", u"CONNECT", None)) + self.manuLabel.setText(QCoreApplication.translate("MainWindow", u"MANUFACTURER", None)) + self.manu.setText(QCoreApplication.translate("MainWindow", u"---", None)) + self.modelLabel.setText(QCoreApplication.translate("MainWindow", u"MODEL", None)) + self.model.setText(QCoreApplication.translate("MainWindow", u"---", None)) + self.snLabel.setText(QCoreApplication.translate("MainWindow", u"SERIAL NO", None)) + self.sn.setText(QCoreApplication.translate("MainWindow", u"---", None)) + self.fwLabel.setText(QCoreApplication.translate("MainWindow", u"F/W REV", None)) + self.fw.setText(QCoreApplication.translate("MainWindow", u"---", None)) + # retranslateUi + + diff --git a/ui_scanning.py b/ui_scanning.py new file mode 100644 index 0000000..fa34879 --- /dev/null +++ b/ui_scanning.py @@ -0,0 +1,41 @@ +from PySide6.QtCore import (QCoreApplication, QRect, Qt) +from PySide6.QtGui import (QFont) +from PySide6.QtWidgets import (QLabel, QFrame) + +class Ui_scanningDialog(object): + def setupUi(self, Dialog): + if not Dialog.objectName(): + Dialog.setObjectName(u"Dialog") + Dialog.resize(320, 160) + # Set the window flags to remove the title bar + Dialog.setWindowFlags(Qt.WindowType.FramelessWindowHint) + + font = QFont() + font.setFamilies([u"Optimism Sans"]) + font.setPointSize(8) + font.setBold(True) + Dialog.setFont(font) + + self.label = QLabel(Dialog) + self.label.setObjectName(u"label") + self.label.setFont(font) + self.label.setGeometry(QRect(10, 10, 300, 140)) + self.label.setAlignment(Qt.AlignCenter) + self.label.setWordWrap(True) + + label_style = """ + QLabel { + background-image: url(""); + background-color: #FF80D4; + border: 1px solid #FF33BB; + border-radius: 10px; + } + """ + self.label.setStyleSheet(label_style) + + self.retranslateUi(Dialog) + # setupUi + + def retranslateUi(self, Dialog): + self.label.setText(QCoreApplication.translate("Dialog", u"SCANNING FOR DSO80204B", None)) + # retranslateUi \ No newline at end of file