def init_menu(self): def _inner_clear(): result = QMessageBox.question(self, self.windowTitle(), 'Delete all images ?', QMessageBox.Ok | QMessageBox.Cancel, QMessageBox.Cancel) if result == QMessageBox.Ok: shutil.rmtree(self.__dirname) _window = self def _inner_toggle(state): if state: _window.setWindowFlags(_window.windowFlags() | Qt.WindowStaysOnTopHint) else: _window.setWindowFlags(_window.windowFlags() & ~Qt.WindowStaysOnTopHint) _window.show() top = QAction('&Top', self, checkable=True) top.triggered.connect(_inner_toggle) top.setChecked(True) hide = QAction('&Hide', self) hide.triggered.connect(lambda: self.setWindowState(Qt.WindowMinimized)) clear = QAction('&Clear', self) clear.triggered.connect(_inner_clear) exit_ = QAction('&Exit', self) exit_.triggered.connect(lambda: self.close()) self.__menu.addAction(top) self.__menu.addAction(hide) self.__menu.addAction(clear) self.__menu.addAction(exit_)
def __init__(self): super(MainWindow, self).__init__() toolBar = QToolBar() self.addToolBar(toolBar) file_menu = self.menuBar().addMenu('&File') open_auction = QAction(QIcon.fromTheme('document-open'), "&open..", self, shortcut=QKeySequence.Open, triggered=self.open) file_menu.addAction(open_auction) exit_action = QAction(QIcon.fromTheme("application-exit"), "E&xit", self, shortcut="Ctrl+q", triggered=self.close) file_menu.addAction(exit_action) play_menu = self.menuBar().addMenu('&Play') play_icon = QIcon(QPixmap(":/icons/01.png")) # 增加一个Action到toolBar toolBar.addAction(play_icon, "Play") play_action = QAction(play_icon, "E&s", self, shortcut="Ctrl+e", triggered=self.close) play_menu.addAction(play_action)
def createTrayIcon(self): self.showProgramsAction = QAction("Programs", self) self.showProgramsAction.triggered.connect(self.showProgramsPage) self.showNewProgramAction = QAction("New Program", self) self.showNewProgramAction.triggered.connect(self.newProgram) self.showSetProgramAction = QAction("Logs", self) self.showSetProgramAction.triggered.connect(self.showLogsPage) self.showDocumentationAction = QAction("Documentation", self) self.showDocumentationAction.triggered.connect(self.showDocumentation) self.quitAction = QAction("Quit", self) self.quitAction.triggered.connect(self.quit) self.trayIconMenu = QMenu(self) self.trayIconMenu.addAction(self.showProgramsAction) self.trayIconMenu.addAction(self.showSetProgramAction) self.trayIconMenu.addAction(self.showNewProgramAction) self.trayIconMenu.addAction(self.showDocumentationAction) self.trayIconMenu.addSeparator() self.trayIconMenu.addAction(self.quitAction) self.trayIcon = QSystemTrayIcon(self) self.trayIcon.setContextMenu(self.trayIconMenu) self.trayIcon.activated.connect(self.iconActivated) self.trayIcon.setIcon(QIcon(":/images/yammi-banana-icon.png")) self.trayIcon.show()
def add_encrypt_menu(menubar: QMenuBar, parent: QMainWindow): def _open_key_mgr_dialog(): open_key_mgr_dialog(parent) def _open_encrypt_dialog(): open_encrypt_dialog(parent) def _open_decrypt_dialog(): open_decrypt_dialog(parent) encryptMenu = menubar.addMenu("加密/解密") key_mgr_act = QAction("密钥管理", parent) key_mgr_act.triggered.connect(_open_key_mgr_dialog) encrypt_act = QAction("加密图片", parent) encrypt_act.triggered.connect(_open_encrypt_dialog) decrypt_act = QAction("解密图片", parent) decrypt_act.triggered.connect(_open_decrypt_dialog) encryptMenu.addAction(key_mgr_act) encryptMenu.addAction(encrypt_act) encryptMenu.addAction(decrypt_act)
def constructContextMenu(self, position): globalPosition = self.mapToGlobal(position) menu = QMenu() optionsEntry = QAction('Options', menu) optionsEntry.setData(self.openOptions) def rotate(): mousePosition = QCursor.pos() self.rotate(mousePosition) rotateEntry = QAction('Rotate', menu) rotateEntry.setData(rotate) aboutEntry = QAction('About', menu) aboutEntry.setData(self.openAbout) quitEntry = QAction('Close', menu) quitEntry.setData(self.quit) menu.addAction(optionsEntry) menu.addAction(rotateEntry) menu.addAction(aboutEntry) menu.addAction(quitEntry) selectedItem = menu.exec_(globalPosition) """:type : QAction""" if selectedItem: selectedItem.data()()
def initUI(self): exitAction = QAction(QIcon('icons/exit.bmp'), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(self.close) helpAction = QAction(QIcon('icons/help.png'), 'Version', self) helpAction.setShortcut('Ctrl+D') helpAction.setStatusTip('Show application\'s version') helpAction.triggered.connect(self.show_version) qt_version_helpAction = QAction(QIcon('icons/help.png'), "Qt's version", self) qt_version_helpAction.setShortcut('Ctrl+A') qt_version_helpAction.setStatusTip('Show Qt\'s version') qt_version_helpAction.triggered.connect(self.show_qt_version) self.statusBar() menubar = self.menuBar() fileMenu = menubar.addMenu('File') menubar.addMenu('Edit') helpMenu = menubar.addMenu('Help') fileMenu.addAction(exitAction) helpMenu.addAction(helpAction) helpMenu.addSeparator() helpMenu.addAction(qt_version_helpAction) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Menubar') self.show()
def __init__(self, widget): QMainWindow.__init__(self) self.setWindowTitle("Tutorial") self.widget = widget # Menu self.menu = self.menuBar() self.file_menu = self.menu.addMenu("File") # Load QAction load_action = QAction("Load", self) load_action.setShortcut("Ctrl+L") load_action.triggered.connect(self.load_data) # Save QAction save_action = QAction("Save", self) save_action.setShortcut("Ctrl+S") save_action.triggered.connect(self.save_data) # Exit QAction exit_action = QAction("Exit", self) exit_action.setShortcut("Ctrl+Q") exit_action.triggered.connect(self.exit_app) self.file_menu.addAction(load_action) self.file_menu.addAction(save_action) self.file_menu.addAction(exit_action) self.setCentralWidget(self.widget)
def outputContextMenu(self, listview: QListView, pos: QPoint): current_model = listview.model() menu = QMenu() edit_action = QAction( "Edit clicked" if len(listview.selectedIndexes()) > 1 else "Edit", menu) edit_action.triggered.connect(self.editCurrentTarget) menu.addAction(edit_action) delete_action = QAction("Remove", menu) delete_action.triggered.connect(lambda: current_model.__delitem__( [i.row() for i in listview.selectedIndexes()])) menu.addAction(delete_action) selected_istemp = current_model[ listview.currentIndex().row()].temporary mark_temp_action = QAction("Mark temp", menu) mark_temp_action.setCheckable(True) mark_temp_action.setChecked(selected_istemp) mark_temp_action.triggered.connect(lambda: [ current_model[i.row()].switch_temporary(not selected_istemp) for i in listview.selectedIndexes() ]) menu.addAction(mark_temp_action) self.addTargetActions(menu) menu.exec_(listview.mapToGlobal(pos))
def addTargetActions(self, menu: QMenu): selected_items = [ i.text() for i in self.list_input_files.selectedItems() ] selected_items += [ self.currentOutputList[i.row()] for i in self.currentOutputListView.selectedIndexes() ] menu.addSeparator() # cannot use default arg to force coping the type here, since the signal also provides other inputs func_create = lambda _t, items: lambda: self.currentOutputList.appendTarget( _t(items)) for t in target_types: if t.validate(selected_items): create_action = QAction(t.description, menu) create_action.triggered.connect(func_create(t, selected_items)) menu.addAction(create_action) menu.addSeparator() func_create_batch = lambda _t, items: lambda: self.currentOutputList.extendTargets( [_t(i) for i in items]) for t in target_types: if all(t.validate([item]) for item in selected_items): create_action = QAction("Batch " + t.description, menu) create_action.triggered.connect( func_create_batch(t, selected_items)) menu.addAction(create_action)
def __init__(self) -> None: super().__init__() self.ui = MainWindowUI() # action self.action_run = QAction(parent=self, text="Run") self.action_stop = QAction(parent=self, text="Stop") self.action_run.triggered.connect(self.start_plot) # type:ignore self.action_stop.triggered.connect(self.stop_plot) # type:ignore self.action_run.setEnabled(False) self.action_stop.setEnabled(False) # setup ui self.ui.setup_ui(self) self.resize(1100, 600) self.move(50, 50) self.ui.port_combobox1.currentTextChanged.connect( self.change_port_combobox1) self.ui.port_combobox2.currentTextChanged.connect( self.change_port_combobox2) self.ui.btn_clear_monitor1.clicked.connect( self.clear_monitor1) # type:ignore self.ui.btn_clear_monitor2.clicked.connect( self.clear_monitor2) # type:ignore # setup toolbar self.ui.toolbar.addAction(self.action_run) # type:ignore self.ui.toolbar.addSeparator() self.ui.toolbar.addAction(self.action_stop) # type:ignore self.ui.toolbar.addSeparator() self.ui.toolbar.addWidget(self.ui.baudrate_combobox) self.ui.toolbar.addSeparator() self.ui.toolbar.addWidget(self.ui.port_combobox1) self.ui.toolbar.addSeparator() self.ui.toolbar.addWidget(self.ui.port_combobox2)
def contextMenuEvent(self, e): context = QMenu(self) crap = QAction("thisone", self) crap.triggered.connect(self.fuckthisshit) context.addAction(crap) context.addAction(QAction("test 2", self)) context.addAction(QAction("test 3", self)) context.exec_(e.globalPos())
def __init__(self, parent=None): MdiWidget.__init__(self, parent) self.setupUi(self) self.current_index = None # this is used in onOperationContextMenu() to track item for menu # Set icons self.NewOperationBtn.setIcon(load_icon("new.png")) self.CopyOperationBtn.setIcon(load_icon("copy.png")) self.DeleteOperationBtn.setIcon(load_icon("delete.png")) # Operations view context menu self.contextMenu = QMenu(self.OperationsTableView) self.actionReconcile = QAction(load_icon("reconcile.png"), self.tr("Reconcile"), self) self.actionCopy = QAction(load_icon("copy.png"), self.tr("Copy"), self) self.actionDelete = QAction(load_icon("delete.png"), self.tr("Delete"), self) self.contextMenu.addAction(self.actionReconcile) self.contextMenu.addSeparator() self.contextMenu.addAction(self.actionCopy) self.contextMenu.addAction(self.actionDelete) # Customize UI configuration self.balances_model = BalancesModel(self.BalancesTableView) self.BalancesTableView.setModel(self.balances_model) self.balances_model.configureView() self.operations_model = OperationsModel(self.OperationsTableView) self.OperationsTableView.setModel(self.operations_model) self.operations_model.configureView() self.OperationsTableView.setContextMenuPolicy(Qt.CustomContextMenu) self.connect_signals_and_slots() self.NewOperationMenu = QMenu() for i in range(self.OperationsTabs.count()): if hasattr(self.OperationsTabs.widget(i), "isCustom"): self.OperationsTabs.widget(i).dbUpdated.connect(self.dbUpdated) self.OperationsTabs.widget(i).dbUpdated.connect( self.operations_model.refresh) self.NewOperationMenu.addAction( self.OperationsTabs.widget(i).name, partial(self.createOperation, i)) self.NewOperationBtn.setMenu(self.NewOperationMenu) # Setup balance and holdings parameters current_time = QDateTime.currentDateTime() current_time.setTimeSpec( Qt.UTC) # We use UTC everywhere so need to force TZ info self.BalanceDate.setDateTime(current_time) self.BalancesCurrencyCombo.setIndex( JalSettings().getValue('BaseCurrency')) self.OperationsTabs.setCurrentIndex(LedgerTransaction.NA) self.OperationsTableView.selectRow(0) self.DateRange.setCurrentIndex(0)
def add_BookBookmarkView_signal(self, old_view): self.add_BookmarkView_signal() action_back = QAction('Back', self) action_remove_all = QAction('Remove all', self) action_back.triggered.connect(lambda: self.toggle_view(old_view)) action_remove_all.triggered.connect( lambda: self.view.delete_bookmark_all('user_book', self.view.b_id)) self.MainToolBar.addAction(action_back) self.MainToolBar.addAction(action_remove_all)
def _create_actions(self): # create config actions self.open_config = QAction("&Open") self.open_config.triggered.connect(self._handle_file_open) self.save_config = QAction("&Save") self.save_config.triggered.connect( lambda: self._handle_file_save(overwrite=True)) self.save_config_as = QAction("&Save As...") self.save_config_as.triggered.connect(self._handle_file_save)
def createStatementsImportMenu(self): for i, source in enumerate(self.statements.sources): if 'icon' in source: source_icon = load_icon(source['icon']) action = QAction(source_icon, source['name'], self) else: action = QAction(source['name'], self) action.setData(i) self.menuStatement.addAction(action) self.statementGroup.addAction(action)
def init_tray_icon(self): self.tray_icon_menu.addAction( QAction('设置', self, triggered=self.show_settings)) self.tray_icon_menu.addAction( QAction('关于', self, triggered=self.show_about)) self.tray_icon_menu.addAction(QAction('退出', self, triggered=self.close)) self.tray_icon.setIcon(QIcon(resource_path('resources/hope-h.png'))) self.tray_icon.setContextMenu(self.tray_icon_menu) self.tray_icon.show()
def __init__(self, base): TritonWidget.__init__(self, base) self.addOTP = None self.closeEvent = self.widgetDeleted self.setWindowTitle('TritonAuth') self.setBackgroundColor(self, Qt.white) self.menu = QMenuBar() self.addMenu = self.menu.addMenu('Add') self.authAction = QAction('Authenticator', self) self.authAction.triggered.connect(self.openAddOTP) self.steamAction = QAction('Steam', self) self.steamAction.triggered.connect(self.openAddSteam) self.addMenu.addAction(self.authAction) self.addMenu.addAction(self.steamAction) self.sortMenu = self.menu.addMenu('Sort') self.nameAction = QAction('Sort by name', self) self.nameAction.triggered.connect(self.sortByName) self.sortMenu.addAction(self.nameAction) self.exportMenu = self.menu.addMenu('Export') self.andOTPAction = QAction('Export to andOTP', self) self.andOTPAction.triggered.connect(self.exportToAndOTP) self.exportMenu.addAction(self.andOTPAction) self.widget = QWidget() self.widget.setContentsMargins(10, 10, 10, 10) self.scrollArea = QScrollArea() self.scrollArea.setFixedSize(400, 495) self.scrollArea.setWidgetResizable(True) self.scrollWidget = QWidget() self.scrollLayout = QVBoxLayout(self.scrollWidget) self.scrollLayout.setAlignment(Qt.AlignTop) self.createAccounts() self.scrollArea.setWidget(self.scrollWidget) self.widgetLayout = QVBoxLayout(self.widget) self.widgetLayout.addWidget(self.scrollArea) self.boxLayout = QVBoxLayout(self) self.boxLayout.setContentsMargins(0, 5, 0, 0) self.boxLayout.addWidget(self.menu) self.boxLayout.addWidget(self.widget) self.setFixedSize(self.sizeHint()) self.center() self.show()
def createStatementsImportMenu(self): for i, statement in enumerate(self.statements.items): statement_name = statement['name'].replace('&', '&&') # & -> && to prevent shortcut creation if statement['icon']: statement_icon = load_icon(statement['icon']) action = QAction(statement_icon, statement_name, self) else: action = QAction(statement_name, self) action.setData(i) self.menuStatement.addAction(action) self.statementGroup.addAction(action)
def __init__(self): super(MainWindow, self).__init__() self.cameraInfo = QCameraInfo.defaultCamera() self.camera = QCamera(self.cameraInfo) self.camera.setCaptureMode(QCamera.CaptureStillImage) self.imageCapture = QCameraImageCapture(self.camera) self.imageCapture.imageCaptured.connect(self.imageCaptured) self.imageCapture.imageSaved.connect(self.imageSaved) self.currentPreview = QImage() toolBar = QToolBar() self.addToolBar(toolBar) fileMenu = self.menuBar().addMenu("&File") shutterIcon = QIcon( os.path.join(os.path.dirname(__file__), "shutter.svg")) self.takePictureAction = QAction(shutterIcon, "&Take Picture", self, shortcut="Ctrl+T", triggered=self.takePicture) self.takePictureAction.setToolTip("Take Picture") fileMenu.addAction(self.takePictureAction) toolBar.addAction(self.takePictureAction) exitAction = QAction(QIcon.fromTheme("application-exit"), "E&xit", self, shortcut="Ctrl+Q", triggered=self.close) fileMenu.addAction(exitAction) aboutMenu = self.menuBar().addMenu("&About") aboutQtAction = QAction("About &Qt", self, triggered=qApp.aboutQt) aboutMenu.addAction(aboutQtAction) self.tabWidget = QTabWidget() self.setCentralWidget(self.tabWidget) self.cameraViewfinder = QCameraViewfinder() self.camera.setViewfinder(self.cameraViewfinder) self.tabWidget.addTab(self.cameraViewfinder, "Viewfinder") if self.camera.status() != QCamera.UnavailableStatus: name = self.cameraInfo.description() self.setWindowTitle("PySide6 Camera Example (" + name + ")") self.statusBar().showMessage("Starting: '" + name + "'", 5000) self.camera.start() else: self.setWindowTitle("PySide6 Camera Example") self.takePictureAction.setEnabled(False) self.statusBar().showMessage("Camera unavailable", 5000)
def add_WelcomeView_signal(self, old_view): self.view.select_book_signal.connect(self.toggle_view) self.view.display_status_signal.connect(self.display_status_message) self.view.set_current_book_signal.connect(self.set_current_book) action_logout = QAction('Logout', self) action_explore_bookmark = QAction('My Bookmark', self) action_logout.triggered.connect(self.logout_action_onclick) action_explore_bookmark.triggered.connect( lambda: self.toggle_view(UserBookmarkView)) self.MainToolBar.addAction(action_logout) self.MainToolBar.addAction(action_explore_bookmark)
def add_ChapterView_signal(self, old_view): self.view.display_status_signal.connect(self.display_status_message) self.view.select_chapter_signal.connect(self.toggle_view) self.view.set_current_chapter_signal.connect(self.set_current_chapter) action_back = QAction('Back', self) action_explore_bookmark = QAction('My Bookmark', self) action_back.triggered.connect(lambda: self.toggle_view(WelcomeView)) action_explore_bookmark.triggered.connect( lambda: self.toggle_view(BookBookmarkView)) self.MainToolBar.addAction(action_back) self.MainToolBar.addAction(action_explore_bookmark)
def createActions(self): self.minimizeAction = QAction("Minimize", self) self.minimizeAction.triggered.connect(self.hide) self.maximizeAction = QAction("Maximize", self) self.maximizeAction.triggered.connect(self.showMaximized) self.restoreAction = QAction("Restore", self) self.restoreAction.triggered.connect(self.showNormal) self.quitAction = QAction("Quit", self) self.quitAction.triggered.connect(qApp.quit)
def __init__(self, parent=None): super(Window, self).__init__(parent) self.iconGroupBox = QGroupBox() self.iconLabel = QLabel() self.iconComboBox = QComboBox() self.showIconCheckBox = QCheckBox() self.messageGroupBox = QGroupBox() self.typeLabel = QLabel() self.durationLabel = QLabel() self.durationWarningLabel = QLabel() self.titleLabel = QLabel() self.bodyLabel = QLabel() self.typeComboBox = QComboBox() self.durationSpinBox = QSpinBox() self.titleEdit = QLineEdit() self.bodyEdit = QTextEdit() self.showMessageButton = QPushButton() self.minimizeAction = QAction() self.maximizeAction = QAction() self.restoreAction = QAction() self.quitAction = QAction() self.trayIcon = QSystemTrayIcon() self.trayIconMenu = QMenu() self.createIconGroupBox() self.createMessageGroupBox() self.iconLabel.setMinimumWidth(self.durationLabel.sizeHint().width()) self.createActions() self.createTrayIcon() self.showMessageButton.clicked.connect(self.showMessage) self.showIconCheckBox.toggled.connect(self.trayIcon.setVisible) self.iconComboBox.currentIndexChanged.connect(self.setIcon) self.trayIcon.messageClicked.connect(self.messageClicked) self.trayIcon.activated.connect(self.iconActivated) self.mainLayout = QVBoxLayout() self.mainLayout.addWidget(self.iconGroupBox) self.mainLayout.addWidget(self.messageGroupBox) self.setLayout(self.mainLayout) self.iconComboBox.setCurrentIndex(1) self.trayIcon.show() self.setWindowTitle("Systray") self.resize(400, 300)
def onHoldingsContextMenu(self, pos): index = self.HoldingsTableView.indexAt(pos) contextMenu = QMenu(self.HoldingsTableView) actionShowChart = QAction(text=self.tr("Show Price Chart"), parent=self.HoldingsTableView) actionShowChart.triggered.connect(partial(self.showPriceChart, index)) contextMenu.addAction(actionShowChart) actionEstimateTax = QAction(text=self.tr("Estimate Russian Tax"), parent=self.HoldingsTableView) actionEstimateTax.triggered.connect( partial(self.estimateRussianTax, index)) contextMenu.addAction(actionEstimateTax) contextMenu.popup(self.HoldingsTableView.viewport().mapToGlobal(pos))
def __init__(self, parent=None): QSystemTrayIcon.__init__(self, QIcon(resource_path("icons/logo.png")), parent) self.setVisible(True) self.setToolTip("SSD: Zextras Drive Desktop") menu = QMenu() self.show_option = QAction("Mostra") self.exit_option = QAction("Esci") menu.addAction(self.show_option) menu.addAction(self.exit_option) self.setContextMenu(menu)
def _build_menus(self) -> None: self.menu = self.menuBar() self.m_file = self.menu.addMenu("File") self.m_edit = self.menu.addMenu("Edit") ta = self.add_texture_action = QAction("Add Texture", self) self.m_edit.addAction(ta) ta.triggered.connect(self._add_texture) ea = self.exit_action = QAction("Exit", self) ea.setShortcut("Ctrl+Q") self.m_file.addAction(ea)
def create_menu_bar(self): menu_bar = self.menuBar() file_menu = QMenu('File', self) settings_action = QAction('Settings', self) settings_action.triggered.connect(self.open_settings) exit_action = QAction('Exit', self) exit_action.triggered.connect(self.close_event) file_menu.addAction(settings_action) file_menu.addAction(exit_action) help_menu = QMenu('Help', self) about_action = QAction('About', self) help_menu.addAction(about_action) menu_bar.addMenu(file_menu) menu_bar.addMenu(help_menu)
def open_menu(self): menu = QMenu(self) add_group = QAction('Add Group', self) add_trigger = QAction('Add Trigger', self) add_group.triggered.connect(self.add_group) add_trigger.triggered.connect(self.add_trigger) menu.addAction(add_group) menu.addAction(add_trigger) menu.addSeparator() add_edit = QAction('Edit', self) add_delete = QAction('Delete', self) add_edit.triggered.connect(self.open_item) add_delete.triggered.connect(self.delete_item) menu.addAction(add_edit) menu.addAction(add_delete) menu.exec(QCursor().pos())
def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.adf = "" self.bbdf = "" self.andf = "" self.ofile = "" self.ofileadd = "" self.ofilerem = "" self.aboutAction = QAction('&关于', self) self.aboutText = """程序版本:1.2\[email protected]\nAll rights reserved\n2021-01-20""" self.aboutAction.triggered.connect( lambda: self.showDialog(self.aboutText)) # 添加事件 self.ui.checkBox.stateChanged.connect(self.updateState) self.ui.pushButton_jwc.clicked.connect(lambda: self.chooseFile("all")) self.ui.pushButton_bb.clicked.connect(lambda: self.chooseFile("bb")) self.ui.pushButton_jwc_new.clicked.connect( lambda: self.chooseFile("all-new")) self.ui.pushButton_start.clicked.connect(self.saveFile) self.ui.pushButton_start.clicked.connect(self.genData) self.ui.menuBar.addAction(self.aboutAction) # 初始化日志窗口 self.logger(u"程序已就绪,请选择文件进行处理。") self.logger(textHelp) self.updateSb(u"请选择文件以运行程序")
def __init__(self): super().__init__() MANGA_ITEMS.itemClicked.connect(self.onSelectedManga) self.deletedManga.connect(self.onDeletedManga) self.selected = None self.summaries = {} for method_name, icon_path in self.BUTTONS: method = getattr(self, method_name) tooltip = f"{method_name.title()} a manga..." action = QAction() action.setToolTip(tooltip) action.setIcon(utils.icon(icon_path)) action.triggered.connect(method) button = QToolButton() button.setDefaultAction(action) self.addWidget(button) # spacer spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.addWidget(spacer) # text below the manga preview self.summary = QLabel() self.addWidget(self.summary) self.show()