def __init__(self, name='LOOKUP_TABLE'): QtGui.QWidget.__init__(self) x_siz, y_siz = 1000, 600 self.gridLayout = QtGui.QGridLayout(self) self.horizontalLayout = QtGui.QHBoxLayout() self.tab_widget = QtGui.QTabWidget(self) self.add_table_btn = PushButton('ADD NEW', tip_msg="Add new lookup table") self.add_table_btn.clicked.connect(self.add_new_table) self.apply_btn = PushButton('APPLY', tip_msg="dumps table to file") self.apply_btn.clicked.connect(self.dump) self.name = name self.dump_name = self.name + '.lkt' self.dump_path = os.path.join(LOOKUP_TABLES_PATH, self.dump_name) init_table = self.load_table() self.lookup_tables = {name: LookupTableWithGraph(name, init_table)} lookup_table = self.lookup_tables.get(self.lookup_tables.keys()[0]) self.tab_widget.addTab(lookup_table, self.name) self.horizontalLayout.addWidget(self.add_table_btn) self.horizontalLayout.addWidget(self.apply_btn) #self.horizontalLayout.addWidget(self.button2) #self.horizontalLayout.addWidget(self.button3) self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1) self.gridLayout.addWidget(self.tab_widget, 1, 0, 4, 4) self.resize(x_siz, y_siz) self.show()
def __init__(self, parent, app_status_file, event_handler=DummyEventHandler(), max_width=600): super(BinFilePanel, self).__init__(parent) frame_grid = QtGui.QGridLayout() frame_grid.setSpacing(1) self.combo_box = ComboBox(self, tip_msg="???") self.combo_box.setFixedWidth(max_width) # self.combo_box.size self.apply_copot_patch_button = SmallPushButton( "COPOT patch", tip_msg=APPLY_COPOT_PATCH_TIP) copot_btn_font = self.apply_copot_patch_button.font() self.apply_copot_patch_button.setFont( QFont(copot_btn_font.defaultFamily(), 5, QFont.Bold)) self.browse_btn = PushButton("...", tip_msg="browse for file") self.browse_btn.setIcon(QtGui.QIcon(BROWSE_ICON)) self.open_btn = PushButton("open", tip_msg="open file in editor") self.app_status_file = app_status_file self.last_browse_location = '' frame_grid.addWidget(self.combo_box, 0, 0, 1, 6) frame_grid.addWidget(self.open_btn, 0, 7, 1, 1) frame_grid.addWidget(self.browse_btn, 0, 8, 1, 1) frame_grid.addWidget(self.apply_copot_patch_button, 1, 7, 1, 1) self.setTitle("BIN FILE") self.setLayout(frame_grid) self.browse_btn.clicked.connect(self.browse_for_file) self.apply_copot_patch_button.clicked.connect( event_handler.apply_copot_fix_patch) self.open_btn.clicked.connect(event_handler.open_bin_file) self.combo_box.setDuplicatesEnabled(False) self.combo_box.setMaxCount(30) self.combo_box.setEditable(True) self.event_handler = event_handler self.setAcceptDrops(True) self.combo_box.dragEnterEvent = self.dragEnterEvent self.combo_box.dropEvent = self.dropEvent
def __init__(self, event_handler, app_status_file_path): QtGui.QWidget.__init__(self) self.buttons_status_tag = "BUTTONS STATUS" self.app_status_file_path = app_status_file_path self.event_handler = event_handler self.setWindowTitle("TEST PANEL") self.x_siz, self.y_siz = 600, 400 self.read_sram_button = PushButton("READ SRAM", tip_msg=READ_SRAM_BTN_TIP) self.read_sram_button.clicked.connect( self.event_handler.read_sram_button_slot) self.test_sram_button = PushButton("TEST SRAM", tip_msg=TEST_SRAM_BTN_TIP) self.test_sram_button.clicked.connect( self.event_handler.test_sram_chip_slot) self.test_upload_button = PushButton("TEST UPLOAD", tip_msg=TEST_UPLOAD_BTN_TIP) self.test_upload_button.clicked.connect( self.event_handler.test_upload_slot) self.text_browser = QTextBrowser() self.digidiag_on_checkbox = CheckBox("Show dididiag data panels", tip_msg="Enable digidiag") self.digidiag_on_checkbox.clicked.connect(self.show_digidiag) config = configparser.ConfigParser() config.read(self.app_status_file_path) try: if config[self.buttons_status_tag]['digidiag_show'] == 'True': self.digidiag_on_checkbox.setChecked(True) self.show_digidiag() except KeyError: pass mainGrid = QtGui.QGridLayout() mainGrid.setSpacing(10) mainGrid.addWidget(self.read_sram_button, 0, 0) mainGrid.addWidget(self.test_sram_button, 0, 1) mainGrid.addWidget(self.test_upload_button, 0, 2) mainGrid.addWidget(self.digidiag_on_checkbox, 1, 0) mainGrid.addWidget(self.text_browser, 2, 0, 10, 3) self.setLayout(mainGrid) self.resize(self.x_siz, self.y_siz)
class ControlPanel(QtGui.QGroupBox): def __init__(self, parent, event_handler=DummyEventHandler()): # super(ControlPanel, self).__init__(parent) QtGui.QGroupBox.__init__(self, parent) self.parent = parent self.setTitle("Control") control_frame_FrameGrid = QtGui.QGridLayout() control_frame_FrameGrid.setSpacing(1) self.control_panel_widget = QtGui.QWidget(self) self.control_panel_widget.setGeometry(QtCore.QRect(10, 30, 151, 74)) self.connect_button = PushButton("Connect", tip_msg=CONNECT_BTN_HELP) self.reflash_button = PushButton("Reflash", tip_msg=REFLASH_BTN_HELP) self.discover_button = PushButton("Discover", tip_msg=DISCOVER_BTN_HELP) self.config_button = PushButton("Config", tip_msg=CONFIG_BTN_HELP) self.resp_time_button = PushButton( "RespTime", tip_msg=CHECK_RESPONSE_TIME_BTN_HELP) self.set_pin_button = PushButton("Set PIN", tip_msg=SET_PIN_BTN_HELP) self.setLayout(control_frame_FrameGrid) self.autoconnect_checkbox = CheckBox("Autoconnect", tip_msg=AUTOCONNECT_CHECKBOX_HELP) control_frame_FrameGrid.addWidget(self.connect_button, 0, 0) control_frame_FrameGrid.addWidget(self.reflash_button, 0, 1) control_frame_FrameGrid.addWidget(self.discover_button, 1, 0) control_frame_FrameGrid.addWidget(self.config_button, 1, 1) control_frame_FrameGrid.addWidget(self.set_pin_button, 2, 0) control_frame_FrameGrid.addWidget(self.resp_time_button, 2, 1) control_frame_FrameGrid.addWidget(self.autoconnect_checkbox, 3, 0, 1, 2) # connect buttons self.connect_button.clicked.connect(event_handler.connect_button_slot) self.discover_button.clicked.connect( event_handler.discover_emu_bt_slot) self.reflash_button.clicked.connect(event_handler.reflash_button_slot) self.config_button.clicked.connect(event_handler.config_button_slot) self.resp_time_button.clicked.connect( event_handler.estimate_response_time_slot) self.set_pin_button.clicked.connect(event_handler.set_pin_button_slot) self.event_handler = event_handler self.event_handler.add_event(self.set_connected) self.event_handler.add_event(self.set_disconnected) def set_connected(self): self.connect_button.setText("disconnect") self.connect_button.set_green_style_sheet() def set_disconnected(self): self.connect_button.setText("Connect") self.connect_button.set_default_style_sheet()
def __init__(self): QtGui.QWidget.__init__(self) self.valuesEditorLayout = QtGui.QGridLayout(self) self.table = Table() self.add_button = PushButton('ADD NEW', tip_msg="Add new value") self.apply_button = PushButton( 'APPLY', tip_msg="Verifies and saves values table") self.add_button.clicked.connect(self.table.add_row) self.apply_button.clicked.connect(self.apply_button_slot) self.values_translation = dict() self.__values_file_path = os.path.join(DIGIDIAG_STATUS_DIR, VALUES_FILE_NAME) self.valuesEditorLayout.addWidget(self.table, 0, 0, 5, 5) self.valuesEditorLayout.addWidget(self.apply_button, 6, 3) self.valuesEditorLayout.addWidget(self.add_button, 6, 4) self.read_status_file()
def __init__(self): QtGui.QWidget.__init__(self) x_siz, y_siz = 700, 600 self.setWindowTitle("DIGIDIAG") self.__ord_to_int_vs_size = { 1: lambda v: struct.unpack('B', v), 2: lambda v: struct.unpack('>H', v), 4: lambda v: struct.unpack('>I', v), } self.frames = dict() self.values_extractor = {} self.gridLayout = QtGui.QGridLayout(self) self.horizontalLayout = QtGui.QHBoxLayout() self.add_view_btn = PushButton('ADD VIEW', tip_msg="Add new view") self.button2 = QtGui.QPushButton('B2') self.button3 = QtGui.QPushButton('B3') self.tabWidget = QtGui.QTabWidget(self) self.values_editor = ValuesEditor() self.values_editor.apply_button_singnal.connect( self.define_extraction_rules) self.tabWidget.addTab(self.values_editor, 'VALUES') self.lookup_table_editor = LookupTableEditor() self.tabWidget.addTab(self.lookup_table_editor, 'LOOKUP TABLES') self.horizontalLayout.addWidget(self.add_view_btn) self.horizontalLayout.addWidget(self.button2) self.horizontalLayout.addWidget(self.button3) self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1) self.gridLayout.addWidget(self.tabWidget, 1, 0, 1, 1) self.resize(x_siz, y_siz) #self.show() self.define_extraction_rules()
def __init__(self, bank_info, general_signal, message_sender, parent=None): """ :param name: bank name """ QtGui.QWidget.__init__(self) self.message_sender = message_sender self.general_signal = general_signal self.bank_info = BankInfo.from_instance(bank_info) # self.bank_num = self.bank_info.bank_number self.name = self.bank_info.bank_name self.setWindowTitle("Customize: {}".format(self.name)) self.x_siz, self.y_siz = 500, 600 self.resize(self.x_siz, self.y_siz) self.info_label = QLabel( "\nCustomize settings for selected bank.\nIt works only for Digifant1 programs" ) self.info_label.setStyleSheet("font: Courier New") self.label = QLabel("Bank name:\n{}".format(self.name)) self.label.setStyleSheet("font: 20pt Courier New; font-weight: bold") self.enable_digidiag_check_box = CheckBox( "enable digidiag", tip_msg="Enable Digifant diagnostic feedback for bank \"{}\"". format(self.name)) self.override_digidiag_frames_check_box = CheckBox( "override frames", tip_msg="If selected it will override default digidiag frames with\n" "values in Custom Digi Frames") self.custom_frames_label = QLabel("\nCustom Digi Frames") self.custom_frames_label.setStyleSheet( "font: 10pt Courier New; font-weight: bold") self.custom_frames_table = CustomFramesEditor( self.bank_info.frames_vector) self.apply_button = PushButton("Apply", tip_msg="Apply changes") self.cancel_button = PushButton("Cancel", tip_msg="Discard changes") self.info_box = QLabel(" ") self.apply_button.clicked.connect(self.apply_button_slot) self.cancel_button.clicked.connect(self.cancel_button_slot) #GRID mainGrid = QtGui.QGridLayout() mainGrid.setSpacing(10) mainGrid.addWidget(self.info_label, 0, 0, 2, 3) mainGrid.addWidget(self.label, 2, 0, 1, 3) mainGrid.addWidget(self.enable_digidiag_check_box, 3, 0) mainGrid.addWidget(self.override_digidiag_frames_check_box, 3, 1) mainGrid.addWidget(self.custom_frames_label, 4, 0, 1, 3) mainGrid.addWidget(self.custom_frames_table, 5, 0, 1, 3) mainGrid.addWidget(self.cancel_button, 6, 0) mainGrid.addWidget(self.apply_button, 6, 1) mainGrid.addWidget(self.info_box, 7, 0, 2, 3) self.setLayout(mainGrid) self.__tmp_resp_msg_thread = None #place window next to parent if parent: x_offset = 0 y_offset = 100 current_position_and_size = WindowGeometry(parent) x_pos = current_position_and_size.get_position_to_the_right() self.setGeometry(x_pos + x_offset, current_position_and_size.pos_y + y_offset, self.x_siz, self.y_siz)
class BankPropertyEditor(QtGui.QWidget, object): def __init__(self, bank_info, general_signal, message_sender, parent=None): """ :param name: bank name """ QtGui.QWidget.__init__(self) self.message_sender = message_sender self.general_signal = general_signal self.bank_info = BankInfo.from_instance(bank_info) # self.bank_num = self.bank_info.bank_number self.name = self.bank_info.bank_name self.setWindowTitle("Customize: {}".format(self.name)) self.x_siz, self.y_siz = 500, 600 self.resize(self.x_siz, self.y_siz) self.info_label = QLabel( "\nCustomize settings for selected bank.\nIt works only for Digifant1 programs" ) self.info_label.setStyleSheet("font: Courier New") self.label = QLabel("Bank name:\n{}".format(self.name)) self.label.setStyleSheet("font: 20pt Courier New; font-weight: bold") self.enable_digidiag_check_box = CheckBox( "enable digidiag", tip_msg="Enable Digifant diagnostic feedback for bank \"{}\"". format(self.name)) self.override_digidiag_frames_check_box = CheckBox( "override frames", tip_msg="If selected it will override default digidiag frames with\n" "values in Custom Digi Frames") self.custom_frames_label = QLabel("\nCustom Digi Frames") self.custom_frames_label.setStyleSheet( "font: 10pt Courier New; font-weight: bold") self.custom_frames_table = CustomFramesEditor( self.bank_info.frames_vector) self.apply_button = PushButton("Apply", tip_msg="Apply changes") self.cancel_button = PushButton("Cancel", tip_msg="Discard changes") self.info_box = QLabel(" ") self.apply_button.clicked.connect(self.apply_button_slot) self.cancel_button.clicked.connect(self.cancel_button_slot) #GRID mainGrid = QtGui.QGridLayout() mainGrid.setSpacing(10) mainGrid.addWidget(self.info_label, 0, 0, 2, 3) mainGrid.addWidget(self.label, 2, 0, 1, 3) mainGrid.addWidget(self.enable_digidiag_check_box, 3, 0) mainGrid.addWidget(self.override_digidiag_frames_check_box, 3, 1) mainGrid.addWidget(self.custom_frames_label, 4, 0, 1, 3) mainGrid.addWidget(self.custom_frames_table, 5, 0, 1, 3) mainGrid.addWidget(self.cancel_button, 6, 0) mainGrid.addWidget(self.apply_button, 6, 1) mainGrid.addWidget(self.info_box, 7, 0, 2, 3) self.setLayout(mainGrid) self.__tmp_resp_msg_thread = None #place window next to parent if parent: x_offset = 0 y_offset = 100 current_position_and_size = WindowGeometry(parent) x_pos = current_position_and_size.get_position_to_the_right() self.setGeometry(x_pos + x_offset, current_position_and_size.pos_y + y_offset, self.x_siz, self.y_siz) #self.show() @property def bank_info(self): return self.__bank_info @bank_info.setter def bank_info(self, bank_info): self.__bank_info = BankInfo.from_instance(bank_info) self.bank_num = self.bank_info.bank_number def update(self, bank_info): self.bank_info = BankInfo.from_instance(bank_info) self.name = self.bank_info.bank_name self.display_values() self.label.setText("Bank name:\n{}".format(self.bank_info.bank_name)) self.info_box.setText("Bank data received") self.setWindowTitle("Customize: {}".format(self.name)) self.enable_digidiag_check_box.update_tip_msg( "Enable Digifant diagnostic feedback for bank \"{}\"".format( self.name)) self.apply_button.setDisabled(False) def cancel_button_slot(self): self.display_values() self.close() def display_values(self): if self.bank_info.enable_digidiag: self.enable_digidiag_check_box.setChecked(True) else: self.enable_digidiag_check_box.setChecked(False) if self.bank_info.override_digidiag: self.override_digidiag_frames_check_box.setChecked(True) else: self.override_digidiag_frames_check_box.setChecked(False) self.custom_frames_table.update_values(self.bank_info.frames_vector) def clean_values(self): self.custom_frames_table.clean_table() self.enable_digidiag_check_box.setChecked(False) self.override_digidiag_frames_check_box.setChecked(False) def watch_message(self, thr): """ Will unlock apply button when thread is finished :param thr: :return: """ while thr.isRunning(): time.sleep(0.2) self.apply_button.setDisabled(False) def apply_button_slot(self): try: self.bank_info.enable_digidiag = self.enable_digidiag_check_box.isChecked( ) self.bank_info.override_digidiag = self.override_digidiag_frames_check_box.isChecked( ) raw_frames = self.custom_frames_table.get() self.bank_info.frames_vector = raw_frames self.info_box.setText('') self.info_box.setText("Sending data...") msg_thread = self.message_sender( message_id=MessageSender.ID.update_bank_data, body=self.bank_info.raw_content, timeout=1, re_tx=3) self.apply_button.setDisabled(True) if self.__tmp_resp_msg_thread is not None: self.__tmp_resp_msg_thread.kill() self.__tmp_resp_msg_thread = GuiThread(self.watch_message, args=(msg_thread, )) self.__tmp_resp_msg_thread.start() except Exception as e: self.info_box.setText(e.message)
def create_delete_row_button(self): delete_button = PushButton('X') delete_button.clicked_s.connect(self.delete_value_slot) delete_button.setStyleSheet(RED_BACKGROUND_PUSHBUTTON) return delete_button
def create_delete_row_button(self): delete_button = PushButton('delete') delete_button.clicked_s.connect(self.delete_value_slot) return delete_button
class BinFilePanel(QtGui.QGroupBox): def __init__(self, parent, app_status_file, event_handler=DummyEventHandler(), max_width=600): super(BinFilePanel, self).__init__(parent) frame_grid = QtGui.QGridLayout() frame_grid.setSpacing(1) self.combo_box = ComboBox(self, tip_msg="???") self.combo_box.setFixedWidth(max_width) # self.combo_box.size self.apply_copot_patch_button = SmallPushButton( "COPOT patch", tip_msg=APPLY_COPOT_PATCH_TIP) copot_btn_font = self.apply_copot_patch_button.font() self.apply_copot_patch_button.setFont( QFont(copot_btn_font.defaultFamily(), 5, QFont.Bold)) self.browse_btn = PushButton("...", tip_msg="browse for file") self.browse_btn.setIcon(QtGui.QIcon(BROWSE_ICON)) self.open_btn = PushButton("open", tip_msg="open file in editor") self.app_status_file = app_status_file self.last_browse_location = '' frame_grid.addWidget(self.combo_box, 0, 0, 1, 6) frame_grid.addWidget(self.open_btn, 0, 7, 1, 1) frame_grid.addWidget(self.browse_btn, 0, 8, 1, 1) frame_grid.addWidget(self.apply_copot_patch_button, 1, 7, 1, 1) self.setTitle("BIN FILE") self.setLayout(frame_grid) self.browse_btn.clicked.connect(self.browse_for_file) self.apply_copot_patch_button.clicked.connect( event_handler.apply_copot_fix_patch) self.open_btn.clicked.connect(event_handler.open_bin_file) self.combo_box.setDuplicatesEnabled(False) self.combo_box.setMaxCount(30) self.combo_box.setEditable(True) self.event_handler = event_handler self.setAcceptDrops(True) self.combo_box.dragEnterEvent = self.dragEnterEvent self.combo_box.dropEvent = self.dropEvent def dragEnterEvent(self, event): file_path = event.mimeData().urls()[0].path() file_path = prepare_file_path_for_platform(file_path) if os.path.isfile(file_path): event.accept() def dropEvent(self, event): bin_path = event.mimeData().urls()[0].path() bin_path = prepare_file_path_for_platform(bin_path) self.insert_new_file(bin_path) def get_current_file(self): bin_path = str(self.combo_box.currentText()) if bin_path: if os.path.exists(bin_path): self.combo_box.moveOnTop(bin_path) return bin_path else: message_box("no such file: {}\n".format(bin_path)) self.combo_box.setEditText(self.combo_box.itemText(0)) self.combo_box.removeByStr(bin_path) def browse_for_file(self): start_dir = self.last_browse_location file_path = QtGui.QFileDialog.getOpenFileName( self, 'Select bin file', start_dir, "hex files (*.bin *.BIN)") if platform != 'Linux': file_path = file_path.replace('/', '\\') return self.insert_new_file(file_path) def insert_new_file(self, file_path): if os.path.isfile( file_path) and file_path not in self.combo_box.getItems( ) and self.check_bin_size(file_path): self.combo_box.insertItem(0, file_path) self.combo_box.setCurrentIndex(0) self.last_browse_location = os.path.dirname(str(file_path)) elif file_path in self.combo_box.getItems(): self.combo_box.moveOnTop(file_path) elif not os.path.isfile(file_path): return False def check_bin_size(self, bin_path): with open(bin_path, 'rb') as f: size = len(f.read()) if size != 0x8000: message_box( "This is not valid 27c256 chip image.\nSize not match 0x{:X}!=0x{:X}" .format(size, 0x8000)) return False return True
def __init__(self, parent, event_handler=DummyEventHandler()): super(BanksPanel, self).__init__(parent) frame_grid = QtGui.QGridLayout() frame_grid.setSpacing(1) self.event_handler = event_handler self.bank_name_max_len = 25 self.setTitle("Banks") # self.bank1_wear_lcd = LcdDisplay(tip_msg=LCD_WEAR_DISPLAY_TIP) # self.bank2_wear_lcd = LcdDisplay(tip_msg=LCD_WEAR_DISPLAY_TIP) # self.bank3_wear_lcd = LcdDisplay(tip_msg=LCD_WEAR_DISPLAY_TIP) settings_icon = QtGui.QIcon(SETTINGS_ICON) self.bank1_settings_btn = PushButton(tip_msg=BANK_SETTINGS_TIP) self.bank1_settings_btn.setIcon(settings_icon) self.bank2_settings_btn = PushButton(tip_msg=BANK_SETTINGS_TIP) self.bank2_settings_btn.setIcon(settings_icon) self.bank3_settings_btn = PushButton(tip_msg=BANK_SETTINGS_TIP) self.bank3_settings_btn.setIcon(settings_icon) self.auto_download_checkbox = CheckBox( "auto download", tip_msg=AUTO_DOWNLOAD_CHECKBOX_TIP) self.bank1pushButton = PushButton("bank 1", tip_msg=BANK_TIP) self.bank2pushButton = PushButton("bank 2", tip_msg=BANK_TIP) self.bank3pushButton = PushButton("bank 3", tip_msg=BANK_TIP) self.bank_name_line_edit = LineEdit( tip_msg="Provide new bank name. ENTER accepts", focus_event=event_handler.bank_name_line_edit_event, focus_out_event=event_handler.bank_name_line_focus_out_event) frame_grid.addWidget(self.bank1pushButton, 0, 0) frame_grid.addWidget(self.bank2pushButton, 1, 0) frame_grid.addWidget(self.bank3pushButton, 2, 0) frame_grid.addWidget(self.bank1_settings_btn, 0, 2) frame_grid.addWidget(self.bank2_settings_btn, 1, 2) frame_grid.addWidget(self.bank3_settings_btn, 2, 2) frame_grid.addWidget(self.bank_name_line_edit, 3, 0, 1, 3) frame_grid.addWidget(self.auto_download_checkbox, 4, 0) self.setLayout(frame_grid) self.bank1pushButton.clicked.connect(event_handler.bank1set_slot) self.bank2pushButton.clicked.connect(event_handler.bank2set_slot) self.bank3pushButton.clicked.connect(event_handler.bank3set_slot) self.bank_name_line_edit.returnPressed.connect( self.bank_name_line_edit_slot)
class BanksPanel(QtGui.QGroupBox): def __init__(self, parent, event_handler=DummyEventHandler()): super(BanksPanel, self).__init__(parent) frame_grid = QtGui.QGridLayout() frame_grid.setSpacing(1) self.event_handler = event_handler self.bank_name_max_len = 25 self.setTitle("Banks") # self.bank1_wear_lcd = LcdDisplay(tip_msg=LCD_WEAR_DISPLAY_TIP) # self.bank2_wear_lcd = LcdDisplay(tip_msg=LCD_WEAR_DISPLAY_TIP) # self.bank3_wear_lcd = LcdDisplay(tip_msg=LCD_WEAR_DISPLAY_TIP) settings_icon = QtGui.QIcon(SETTINGS_ICON) self.bank1_settings_btn = PushButton(tip_msg=BANK_SETTINGS_TIP) self.bank1_settings_btn.setIcon(settings_icon) self.bank2_settings_btn = PushButton(tip_msg=BANK_SETTINGS_TIP) self.bank2_settings_btn.setIcon(settings_icon) self.bank3_settings_btn = PushButton(tip_msg=BANK_SETTINGS_TIP) self.bank3_settings_btn.setIcon(settings_icon) self.auto_download_checkbox = CheckBox( "auto download", tip_msg=AUTO_DOWNLOAD_CHECKBOX_TIP) self.bank1pushButton = PushButton("bank 1", tip_msg=BANK_TIP) self.bank2pushButton = PushButton("bank 2", tip_msg=BANK_TIP) self.bank3pushButton = PushButton("bank 3", tip_msg=BANK_TIP) self.bank_name_line_edit = LineEdit( tip_msg="Provide new bank name. ENTER accepts", focus_event=event_handler.bank_name_line_edit_event, focus_out_event=event_handler.bank_name_line_focus_out_event) frame_grid.addWidget(self.bank1pushButton, 0, 0) frame_grid.addWidget(self.bank2pushButton, 1, 0) frame_grid.addWidget(self.bank3pushButton, 2, 0) frame_grid.addWidget(self.bank1_settings_btn, 0, 2) frame_grid.addWidget(self.bank2_settings_btn, 1, 2) frame_grid.addWidget(self.bank3_settings_btn, 2, 2) frame_grid.addWidget(self.bank_name_line_edit, 3, 0, 1, 3) frame_grid.addWidget(self.auto_download_checkbox, 4, 0) self.setLayout(frame_grid) self.bank1pushButton.clicked.connect(event_handler.bank1set_slot) self.bank2pushButton.clicked.connect(event_handler.bank2set_slot) self.bank3pushButton.clicked.connect(event_handler.bank3set_slot) self.bank_name_line_edit.returnPressed.connect( self.bank_name_line_edit_slot) def update_tip_msg_for_bank(self, bank_button_no, bank_name, msg): """ Update tip message for button {1, 2, 3} :param bank_button_no: :param msg: :return: """ bank_button = [ self.bank1pushButton, self.bank2pushButton, self.bank3pushButton ][bank_button_no] bank_button.update_tip_msg(msg, wrap=False) if len(bank_name) > 14: bank_name = bank_name[0:11] + '...' bank_button.setText(bank_name) def put_bank_name(self, name): self.bank_name_line_edit.setText(name[0:self.bank_name_max_len]) def get_bank_name_text(self): bank_name = str(self.bank_name_line_edit.text()) return bank_name[0:self.bank_name_max_len] def set_default_style_sheet_for_buttons(self): self.bank1pushButton.set_default_style_sheet() self.bank2pushButton.set_default_style_sheet() self.bank3pushButton.set_default_style_sheet() def bank_name_line_edit_slot(self): bank_name = self.bank_name_line_edit.text()[0:self.bank_name_max_len] self.bank_name_line_edit.setText(bank_name) self.event_handler.set_bank_name() self.bank_name_line_edit.clearFocus() def disable_active_button(self): to_signal(self.bank1pushButton.set_default_style_sheet)() to_signal(self.bank2pushButton.set_default_style_sheet)() to_signal(self.bank3pushButton.set_default_style_sheet)() def set_active_button(self, bank_no): to_signal(self.bank1pushButton.set_default_style_sheet)() to_signal(self.bank2pushButton.set_default_style_sheet)() to_signal(self.bank3pushButton.set_default_style_sheet)() set_green_style = \ [ self.bank1pushButton.set_green_style_sheet, self.bank2pushButton.set_green_style_sheet, self.bank3pushButton.set_green_style_sheet, ][bank_no] to_signal(set_green_style).emit()