def create_ui(self): vl = VLayout(3) self.setLayout(vl) # Banner banner = QLabel() banner.setPixmap(QPixmap(':/banner.png')) vl.addWidget(banner) # Port groupbox gbPort = GroupBoxH('Selecionar porta', 3) self.cbxPort = QComboBox() pbRefreshPorts = QPushButton('Atualizar') gbPort.addWidget(self.cbxPort) gbPort.addWidget(pbRefreshPorts) gbPort.layout().setStretch(0, 4) gbPort.layout().setStretch(1, 1) # Buttons self.flash = QPushButton('Gravar firmware!') self.flash.setFixedHeight(60) self.flash.setStyleSheet('background-color: #0D2556;') hl_btns = HLayout([50, 3, 50, 3]) hl_btns.addWidgets([self.flash]) vl.addWidgets([gbPort]) vl.addLayout(hl_btns) pbRefreshPorts.clicked.connect(self.refreshPorts) self.flash.clicked.connect(self.start_process)
def createUI(self): vl = VLayout() self.setLayout(vl) # Banner banner = QLabel() banner.setPixmap(QPixmap(":/banner.png")) vl.addWidget(banner) # Port groupbox gbPort = GroupBoxH("Select port", 3) self.cbxPort = QComboBox() pbRefreshPorts = QPushButton("Refresh") gbPort.addWidget(self.cbxPort) gbPort.addWidget(pbRefreshPorts) gbPort.layout().setStretch(0, 4) gbPort.layout().setStretch(1, 1) # Firmware groupbox gbFW = GroupBoxV("Select image", 3) hl_rb = HLayout(0) rbFile = QRadioButton("BIN file") self.rbRelease = QRadioButton("Release") self.rbRelease.setEnabled(False) self.rbDev = QRadioButton("Development") self.rbDev.setEnabled(False) rbgFW = QButtonGroup(gbFW) rbgFW.addButton(rbFile, 0) rbgFW.addButton(self.rbRelease, 1) rbgFW.addButton(self.rbDev, 2) hl_rb.addWidgets([rbFile, self.rbRelease, self.rbDev]) gbFW.addLayout(hl_rb) self.wFile = QWidget() hl_file = HLayout(0) self.file = QLineEdit() self.file.setReadOnly(True) self.file.setPlaceholderText("Click 'Open' to select the image") pbFile = QPushButton("Open") hl_file.addWidgets([self.file, pbFile]) self.wFile.setLayout(hl_file) self.cbHackboxBin = QComboBox() self.cbHackboxBin.setVisible(False) self.cbHackboxBin.setEnabled(False) self.cbBackup = QCheckBox("Backup original firmware") self.cbBackup.setToolTip( "Firmware backup is ESPECIALLY recommended when you flash a Sonoff, Tuya, Shelly etc. for the first time.\nWithout a backup you won't be able to restore the original functionality." ) self.cbErase = QCheckBox("Erase before flashing") self.cbErase.setToolTip( "Erasing previous firmware ensures all flash regions are clean for Tasmota, which prevents many unexpected issues.\nIf unsure, leave enabled." ) self.cbErase.setChecked(True) gbFW.addWidgets( [self.wFile, self.cbHackboxBin, self.cbBackup, self.cbErase]) # Buttons self.pbTasmotize = QPushButton("Tasmotize!") self.pbTasmotize.setFixedHeight(50) self.pbTasmotize.setStyleSheet("background-color: #223579;") self.pbConfig = QPushButton("Send config") self.pbConfig.setStyleSheet("background-color: #571054;") self.pbConfig.setFixedHeight(50) self.pbQuit = QPushButton("Quit") self.pbQuit.setStyleSheet("background-color: #c91017;") self.pbQuit.setFixedSize(QSize(50, 50)) hl_btns = HLayout([50, 3, 50, 3]) hl_btns.addWidgets([self.pbTasmotize, self.pbConfig, self.pbQuit]) vl.addWidgets([gbPort, gbFW]) vl.addLayout(hl_btns) pbRefreshPorts.clicked.connect(self.refreshPorts) rbgFW.buttonClicked[int].connect(self.setBinMode) rbFile.setChecked(True) pbFile.clicked.connect(self.openBinFile) self.pbTasmotize.clicked.connect(self.start_process) self.pbConfig.clicked.connect(self.send_config) self.pbQuit.clicked.connect(self.reject)
def create_ui(self): vl = VLayout(5) self.setLayout(vl) # Banner banner = QLabel() banner.setPixmap(QPixmap(':/banner.png')) vl.addWidget(banner) # Port groupbox gbPort = GroupBoxH('Select port', 3) self.cbxPort = QComboBox() pbRefreshPorts = QPushButton('Refresh') gbPort.addWidget(self.cbxPort) gbPort.addWidget(pbRefreshPorts) gbPort.layout().setStretch(0, 4) gbPort.layout().setStretch(1, 1) # Firmware groupbox gbFW = GroupBoxV('Select image', 3) hl_rb = HLayout(0) rbFile = QRadioButton('BIN file') self.rbRelease = QRadioButton('Release') self.rbRelease.setEnabled(False) self.rbDev = QRadioButton('Development') self.rbDev.setEnabled(False) self.rbgFW = QButtonGroup(gbFW) self.rbgFW.addButton(rbFile, 0) self.rbgFW.addButton(self.rbRelease, 1) self.rbgFW.addButton(self.rbDev, 2) hl_rb.addWidgets([rbFile, self.rbRelease, self.rbDev]) gbFW.addLayout(hl_rb) self.wFile = QWidget() hl_file = HLayout(0) self.file = QLineEdit() self.file.setReadOnly(True) self.file.setPlaceholderText('Click "Open" to select the image') pbFile = QPushButton('Open') hl_file.addWidgets([self.file, pbFile]) self.wFile.setLayout(hl_file) self.cbHackboxBin = QComboBox() self.cbHackboxBin.setVisible(False) self.cbHackboxBin.setEnabled(False) self.cbSelfReset = QCheckBox('Self-resetting device (NodeMCU, Wemos)') self.cbSelfReset.setToolTip( 'Check if your device has self-resetting capabilities supported by esptool' ) gbBackup = GroupBoxV('Backup') self.cbBackup = QCheckBox('Save original firmware') self.cbBackup.setToolTip( 'Firmware backup is ESPECIALLY recommended when you flash a Sonoff, Tuya, Shelly etc. for the first time.\nWithout a backup you will not be able to restore the original functionality.' ) self.cbxBackupSize = QComboBox() self.cbxBackupSize.addItems([f'{2 ** s}MB' for s in range(5)]) self.cbxBackupSize.setEnabled(False) hl_backup_size = HLayout(0) hl_backup_size.addWidgets([QLabel('Flash size:'), self.cbxBackupSize]) hl_backup_size.setStretch(0, 3) hl_backup_size.setStretch(1, 1) gbBackup.addWidget(self.cbBackup) gbBackup.addLayout(hl_backup_size) self.cbErase = QCheckBox('Erase before flashing') self.cbErase.setToolTip( 'Erasing previous firmware ensures all flash regions are clean for Tasmota, which prevents many unexpected issues.\nIf unsure, leave enabled.' ) self.cbErase.setChecked(True) gbFW.addWidgets( [self.wFile, self.cbHackboxBin, self.cbSelfReset, self.cbErase]) # Buttons self.pbTasmotize = QPushButton('Upload tinyGS firmware!') self.pbTasmotize.setFixedHeight(50) self.pbTasmotize.setStyleSheet('background-color: #223579;') self.pbConfig = QPushButton('Send config') self.pbConfig.setStyleSheet('background-color: #571054;') self.pbConfig.setFixedHeight(50) self.pbGetIP = QPushButton('Get IP') self.pbGetIP.setFixedSize(QSize(75, 50)) self.pbGetIP.setStyleSheet('background-color: #2a8a26;') self.pbQuit = QPushButton('Quit') self.pbQuit.setStyleSheet('background-color: #c91017;') self.pbQuit.setFixedSize(QSize(50, 50)) hl_btns = HLayout([50, 3, 50, 3]) hl_btns.addWidgets([self.pbTasmotize]) vl.addWidgets([gbPort]) vl.addLayout(hl_btns) pbRefreshPorts.clicked.connect(self.refreshPorts) self.rbgFW.buttonClicked[int].connect(self.setBinMode) rbFile.setChecked(True) pbFile.clicked.connect(self.openBinFile) self.cbBackup.toggled.connect(self.cbxBackupSize.setEnabled) self.pbTasmotize.clicked.connect(self.start_process) self.pbConfig.clicked.connect(self.send_config) self.pbGetIP.clicked.connect(self.get_ip) self.pbQuit.clicked.connect(self.reject)