def setup_menu(self): """ Adds top menu bar and various menu items. """ menu_bar = QtWidgets.QMenuBar(self.widget) file_menu = QtWidgets.QMenu('File') help_menu = QtWidgets.QMenu('Help') edit_menu = QtWidgets.QMenu('Edit') for menu in [file_menu, edit_menu, help_menu]: menu_bar.addMenu(menu) file_menu.addAction('New', self.new) file_menu.addAction('Open', self.open) file_menu.addAction('&Save', self.save) file_menu.addAction('Save As', self.save) export_menu = QtWidgets.QMenu('Export') file_menu.addMenu(export_menu) ex = export_menu.addAction ex('Save Selected Text', self.save_selected_text) ex('Export Selected To External Editor', self.export_selected_to_external_editor) ex('Export Current Tab To External Editor', self.export_current_tab_to_external_editor) ex('Export All Tabs To External Editor', self.export_all_tabs_to_external_editor) help_menu.addAction('Reload Python Editor', self.widget._parent.reload_package) help_menu.addAction('About Python Editor', self.show_about_dialog) edit_menu.addAction('Preferences', self.show_preferences) edit_menu.addAction('Shortcuts', self.show_shortcuts) self.widget.layout().addWidget(menu_bar)
def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: super(FileTree, self).mousePressEvent(event) if event.button() == QtCore.Qt.RightButton: menu = QtWidgets.QMenu() menu.addAction('New', 'print "does nothing"') menu.addAction('Delete', 'print "does nothing"') cursor = QtGui.QCursor() pos = cursor.pos() menu.exec_(pos)
def show_tab_menu(self): """ Show a list of tabs and go to the tab clicked. """ menu = QtWidgets.QMenu() from functools import partial for i in range(self.count()): tab_name = self.tabText(i) if not tab_name.strip(): button = self.tabBar().tabButton(i, QtWidgets.QTabBar.LeftSide) if not isinstance(button, TabButton): continue tab_name = button.text() action = partial(self.setCurrentIndex, i) menu.addAction(tab_name, action) menu.exec_(QtGui.QCursor().pos())
def mouseReleaseEvent(self, event): self.tab_pressed = False i = self.tabAt(event.pos()) if event.button() == QtCore.Qt.LeftButton: if i == -1: i = self.currentIndex() if (i != self.start_move_index): self.tab_repositioned_signal.emit(i, self.start_move_index) self.handle_close_button_display(event) elif event.button() == QtCore.Qt.RightButton: menu = QtWidgets.QMenu() rename = partial(self._show_name_edit, i) menu.addAction('Rename', rename) move_to_first = partial(self.move_to_first, i) menu.addAction('Move Tab to First', move_to_first) move_to_last = partial(self.move_to_last, i) menu.addAction('Move Tab to Last', move_to_last) close_tab_func = partial(self.removeTab, i) menu.addAction('Close Tab', close_tab_func) copy_file_path = partial(self.copy_tab_file_path, i) menu.addAction('Copy File Path', copy_file_path) # Other ideas (TODO) """ menu.addAction('Close Other Tabs', ) menu.addAction('Close Tabs to Right', ) menu.addAction('Close Tabs to Left', ) menu.addAction('Pin Tab', ) """ menu.exec_(QtGui.QCursor().pos()) elif event.button() == QtCore.Qt.MiddleButton: if i != -1: self.removeTab(i) return super(Tabs, self).mouseReleaseEvent(event)
def show_tab_menu(self): """ Show a list of tabs and go to the tab clicked. """ menu = QtWidgets.QMenu() current_index = self.tabs.currentIndex() from functools import partial for i in range(self.tabs.count()): tab_name = self.tabs.tabText(i) if not tab_name.strip(): continue func = partial(self.tabs.setCurrentIndex, i) action = menu.addAction(tab_name, func) if i == current_index: font = action.font() font.setBold(True) font.setUnderline(True) action.setFont(font) menu.setActiveAction(action) menu.exec_(QtGui.QCursor().pos())
def mousePressEvent(self, event): self.selectedIndices = self.selectedIndexes() if bool(self.selectedIndices): self.widget = self.model().data(self.selectedIndices[0], QtCore.Qt.UserRole) print(self.widget) if event.button() == QtCore.Qt.RightButton: self.menu = QtWidgets.QMenu() self.regularMenu = QtWidgets.QMenu('regular') self.menu.addMenu(self.regularMenu) self.builtInMethodMenu = QtWidgets.QMenu('built-in methods') self.regularMenu.addMenu(self.builtInMethodMenu) self.eventMenu = QtWidgets.QMenu('events') self.builtInMethodMenu.addMenu(self.eventMenu) self.methodMenu = QtWidgets.QMenu('method-wrappers') self.regularMenu.addMenu(self.methodMenu) self.dictMenu = QtWidgets.QMenu('dict types') self.regularMenu.addMenu(self.dictMenu) for method in dir(self.widget): attr = getattr(self.widget, method) if isinstance(attr, types.BuiltinMethodType): if 'event' in method.lower(): self.eventMenu.addAction( method, lambda method=attr, widget=self.widget: self. testWidget(method, widget)) else: self.builtInMethodMenu.addAction( method, lambda method=attr, widget=self.widget: self. testWidget(method, widget)) elif isinstance(attr, type(self.widget.__init__)): self.methodMenu.addAction( method, lambda method=attr, widget=self.widget: self. testWidget(method, widget)) elif isinstance(attr, types.DictType): for key in attr.keys(): try: value = attr.get(key) print(attr, value) self.dictMenu.addAction( ', '.join([key, str(value)]), self.dud) except: pass elif isinstance(attr, QtGui.QPaintDevice.PaintDeviceMetric): pass #seems boring else: try: self.regularMenu.addAction( ', '.join([method, str(attr), str(type(attr))]), lambda method=attr, widget=self.widget: self. testWidget(method, widget)) except: pass self.metaMenu = QtWidgets.QMenu('meta') self.menu.addMenu(self.metaMenu) self.metaMethodMenu = QtWidgets.QMenu('meta methods') self.metaMenu.addMenu(self.metaMethodMenu) o = self.widget conn = QtCore.Qt.QueuedConnection for method, signature in self.getMetaMethods(self.widget): self.metaMethodMenu.addAction( signature, lambda obj=o, conn=conn: o.metaObject().invokeMethod( obj, QtCore.QGenericArgument())) self.metaPropMenu = QtWidgets.QMenu('meta properties') self.metaMenu.addMenu(self.metaPropMenu) for name, prop in self.getMetaProperties(self.widget): self.metaPropMenu.addAction(name, lambda obj=o: prop.read(o)) self.menu.exec_(QtGui.QCursor().pos()) else: super(self.__class__, self).mousePressEvent(event)