def toggleCursor(self): if self.cursor().shape() == QCursor(Qt.ArrowCursor).shape(): raw = QPixmap(":/gui/pics/pardusman-icon.png") raw.setMask(raw.mask()) self.setCursor(QCursor(raw, 2, 2)) else: self.unsetCursor()
def updateMousePos(self): """ 更新鼠标位置坐标 """ self.MouseX = QCursor.pos().x() self.MouseY = QCursor.pos().y() s = "X坐标:{};Y坐标:{}".format(self.MouseX, self.MouseY) self.MousePos.setText(s)
def _grantPermissionsCb(self): # We need to have cursor inside view to correctly grab mouse if self._feature == QWebEnginePage.MouseLock: # QWidget view = self._page.view() QCursor.setPos(view.mapToGlobal(view.rect().center())) self._page.setFeaturePermission(self._origin, self._feature, QWebEnginePage.PermissionGrantedByUser) if self._ui.remember.isChecked(): gVar.app.html5PermissionsManager().rememberPermissions( self._origin, self._feature, QWebEnginePage.PermissionGrantedByUser) self.hide()
def move_window_to_cursor(widget: QWidget): width, height = widget.width(), widget.height() pos = QCursor.pos() pos.setX(pos.x() - width / 2) pos.setY(pos.y() - height / 2) widget.move(pos)
def workaround_broken_under_mouse(ch): import sip from PyQt5.Qt import QCursor, QToolButton # See https://bugreports.qt-project.org/browse/QTBUG-40233 if isinstance(ch, QToolButton) and not sip.isdeleted(ch): ch.setAttribute(Qt.WA_UnderMouse, ch.rect().contains(ch.mapFromGlobal(QCursor.pos()))) ch.update()
def scrollbar_context_menu(self, x, y, frac): m = QMenu(self) amap = {} def a(text, name): m.addAction(text) amap[text] = name a(_('Scroll here'), 'here') m.addSeparator() a(_('Start of book'), 'start_of_book') a(_('End of book'), 'end_of_book') m.addSeparator() a(_('Previous section'), 'previous_section') a(_('Next section'), 'next_section') m.addSeparator() a(_('Start of current file'), 'start_of_file') a(_('End of current file'), 'end_of_file') m.addSeparator() a(_('Hide this scrollbar'), 'toggle_scrollbar') q = m.exec_(QCursor.pos()) if not q: return q = amap[q.text()] if q == 'here': self.web_view.goto_frac(frac) else: self.web_view.trigger_shortcut(q)
def show_context_menu(self, point): idx = self.currentIndex() if idx and idx.isValid() and not idx.data(Qt.UserRole): m = QMenu() m.addAction(QIcon(I('view.png')), _('View this cover at full size'), self.show_cover) m.addAction(QIcon(I('edit-copy.png')), _('Copy this cover to clipboard'), self.copy_cover) m.exec_(QCursor.pos())
def show_context_menu(self, point): item = self.currentItem() def key(k): sc = unicode_type(QKeySequence(k | Qt.CTRL).toString(QKeySequence.NativeText)) return ' [%s]'%sc if item is not None: m = QMenu() m.addAction(QIcon(I('edit_input.png')), _('Change the location this entry points to'), self.edit_item) m.addAction(QIcon(I('modified.png')), _('Bulk rename all selected items'), self.bulk_rename) m.addAction(QIcon(I('trash.png')), _('Remove all selected items'), self.del_items) m.addSeparator() ci = unicode_type(item.data(0, Qt.DisplayRole) or '') p = item.parent() or self.invisibleRootItem() idx = p.indexOfChild(item) if idx > 0: m.addAction(QIcon(I('arrow-up.png')), (_('Move "%s" up')%ci)+key(Qt.Key_Up), self.move_up) if idx + 1 < p.childCount(): m.addAction(QIcon(I('arrow-down.png')), (_('Move "%s" down')%ci)+key(Qt.Key_Down), self.move_down) if item.parent() is not None: m.addAction(QIcon(I('back.png')), (_('Unindent "%s"')%ci)+key(Qt.Key_Left), self.move_left) if idx > 0: m.addAction(QIcon(I('forward.png')), (_('Indent "%s"')%ci)+key(Qt.Key_Right), self.move_right) m.addSeparator() case_menu = QMenu(_('Change case')) case_menu.addAction(_('Upper case'), self.upper_case) case_menu.addAction(_('Lower case'), self.lower_case) case_menu.addAction(_('Swap case'), self.swap_case) case_menu.addAction(_('Title case'), self.title_case) case_menu.addAction(_('Capitalize'), self.capitalize) m.addMenu(case_menu) m.exec_(QCursor.pos())
def mouseMoveEvent(self, mouseEvent): # 鼠标移动时,更新当前位置,并在上一个位置和当前位置间画线 self.__currentPos = mouseEvent.pos() if mouseEvent.buttons() == QtCore.Qt.LeftButton: self.__painter.begin(self.__board) if self.EraserMode == False: # 非橡皮擦模式 self.__painter.setPen(QPen(self.__penColor, self.__thickness)) # 设置画笔颜色,粗细 else: # 橡皮擦模式下画笔为纯白色,粗细为10 self.__painter.setPen(QPen(Qt.white, 10)) # 画线 self.__painter.drawLine(self.__lastPos, self.__currentPos) self.__painter.end() self.__lastPos = self.__currentPos self.update() # 更新显示 self.mouseEventpos = mouseEvent.pos() # pos = self.mapToGlobal(mouseEvent.pos()) #相對位置轉絕對 # print(pos) pos = QCursor.pos() hwnd = win32gui.WindowFromPoint((pos.x(), pos.y())) print('x,y', pos.x(), pos.y()) print(*win32gui.GetWindowRect(hwnd)) # self.frameWidget.setRect(*win32gui.GetWindowRect(hwnd)) # 截图 screen = QApplication.primaryScreen() # 获取主显示屏对象(QScreen对象) if screen is not None: image = screen.grabWindow(0, pos.x() - 60, pos.y() - 60, 120, 120) if not image.isNull(): self.EnlargeImg.setPixmap(image.scaled(240, 240))
def exec(self): file = self.ui.LoadFilePath.text() if not (os.path.exists(file) and (os.path.isfile(file))): QtWidgets.QMessageBox.information(None, "エラー", "指定したファイル「" + file + "」が見つかりませんでした。", QMessageBox.Ok) return QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) try: Z = pd.read_table(file, sep=' ', header=None, skiprows=6, engine = 'python') #「Initializing from file failed」エラー回避のためengineにpython指定 Z[Z == -9999] = np.nan X, Y = np.meshgrid(np.linspace(0,1,self.ui.RowNum.value()), np.linspace(0,1,self.ui.ColNum.value())) #2D表示 plt.imshow(Z) plt.show() #3D表示 ax = plt.axes(projection='3d') ax.plot_surface(X, Y, Z) plt.show() #3D表示 色付き ax = plt.axes(projection='3d') Z = Z.get_values() ls = LightSource() rgb = ls.shade(Z, cmap=cm.gist_earth, vert_exag=0.1, blend_mode='soft') surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=rgb, linewidth=0, antialiased=False, shade=False) plt.show() finally: QApplication.restoreOverrideCursor() QtWidgets.QMessageBox.information(None, "終了", "終了しました。", QMessageBox.Ok)
def show_context_menu(self, point): item = self.currentItem() def key(k): sc = unicode(QKeySequence(k | Qt.CTRL).toString(QKeySequence.NativeText)) return ' [%s]'%sc if item is not None: m = QMenu() ci = unicode(item.data(0, Qt.DisplayRole) or '') p = item.parent() or self.invisibleRootItem() idx = p.indexOfChild(item) if idx > 0: m.addAction(QIcon(I('arrow-up.png')), (_('Move "%s" up')%ci)+key(Qt.Key_Up), self.move_up) if idx + 1 < p.childCount(): m.addAction(QIcon(I('arrow-down.png')), (_('Move "%s" down')%ci)+key(Qt.Key_Down), self.move_down) m.addAction(QIcon(I('trash.png')), _('Remove all selected items'), self.del_items) if item.parent() is not None: m.addAction(QIcon(I('back.png')), (_('Unindent "%s"')%ci)+key(Qt.Key_Left), self.move_left) if idx > 0: m.addAction(QIcon(I('forward.png')), (_('Indent "%s"')%ci)+key(Qt.Key_Right), self.move_right) m.addAction(QIcon(I('edit_input.png')), _('Change the location this entry points to'), self.edit_item) m.addAction(_('Change all selected items to title case'), self.title_case) m.addAction(_('Change all selected items to upper case'), self.upper_case) m.addAction(QIcon(I('modified.png')), _('Bulk rename all selected items'), self.bulk_rename) m.exec_(QCursor.pos())
def show_context_menu(self, point): idx = self.currentIndex() if idx and idx.isValid() and not idx.data(Qt.ItemDataRole.UserRole): m = QMenu(self) m.addAction(QIcon(I('view.png')), _('View this cover at full size'), self.show_cover) m.addAction(QIcon(I('edit-copy.png')), _('Copy this cover to clipboard'), self.copy_cover) m.exec_(QCursor.pos())
def do_search(self): query = unicode_type(self.search_text.text()) if not query: d = error_dialog( self.gui, _('Match books'), _('You must enter a search expression into the search box')) d.exec_() return try: self.search_button.setEnabled(False) QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) books = self.library_db.data.search(query, return_matches=True) self.books_table.setRowCount(len(books)) self.books_table.setSortingEnabled(False) for row, b in enumerate(books): mi = self.library_db.get_metadata(b, index_is_id=True, get_user_categories=False) a = TableItem(mi.title, mi.title_sort) a.setData(Qt.UserRole, b) self.books_table.setItem(row, 0, a) a = TableItem(' & '.join(mi.authors), mi.author_sort) self.books_table.setItem(row, 1, a) series = mi.format_field('series')[1] if series is None: series = '' a = TableItem(series, mi.series, mi.series_index) self.books_table.setItem(row, 2, a) self.books_table.setRowHeight(row, self.books_table_row_height) self.books_table.setSortingEnabled(True) finally: self.search_button.setEnabled(True) QApplication.restoreOverrideCursor()
def __enter__(self): self.stacks.setCurrentIndex(0) self.busy.setVisible(True) self.busy.pi.startAnimation() QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents(QEventLoop.ExcludeUserInputEvents | QEventLoop.ExcludeSocketNotifiers)
def _get_split_size(self, splitepub, newspecs): try: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) self.gui.status_bar.show_message(_('Computing size of EPUB...'), 60000) linenums, changedtocs, checkedalways = newspecs if not self.has_lines(linenums): return self.t = time.time() outputepub = PersistentTemporaryFile(suffix='.epub') outlist = list(set(linenums + checkedalways)) outlist.sort() splitepub.write_split_epub( outputepub, outlist, changedtocs=changedtocs, ) logger.debug("size:%s" % (time.time() - self.t)) self.t = time.time() finally: self.gui.status_bar.show_message( _('Finished computing size of EPUB.'), 3000) QApplication.restoreOverrideCursor() info_dialog(self.gui, _('Size of New Book'), _('New EPUB File Size:') + ' ' + humanbytes(os.path.getsize(outputepub.name)), show_copy_button=False).exec_()
def showContextMenu(self, pos: QPoint): self.clickedItem = self.treeView.getNodeByPos(pos) self.treeView.currentIndex() menu = QMenu(self) if self.clickedItem is None: action = menu.addAction("add project") action.triggered.connect(self.onAddProject) elif self.clickedItem.getType() == const.NODE_PROJECT: action = menu.addAction("add service") action.triggered.connect(self.onAddService) action = menu.addAction("rename") action.triggered.connect(self.onRename) elif self.clickedItem.getType() == const.NODE_SERVICE: action = menu.addAction("add module") action.triggered.connect(self.onAddModule) action = menu.addAction("rename") action.triggered.connect(self.onRename) elif self.clickedItem.getType() == const.NODE_MODULE: action = menu.addAction("add method") action.triggered.connect(self.onAddMethod) action = menu.addAction("rename") action.triggered.connect(self.onRename) else: action = menu.addAction("rename") action.triggered.connect(self.onRename) action = menu.addAction("delete") action.triggered.connect(self.onDeleteMethod) menu.exec_(QCursor.pos())
def mousePosition(self, e): p = self.mapToGlobal(QCursor.pos()) (px, py) = (p.x(), p.y()) ((xy), (wh)) = self.setGeoVars() (x, y, w, h) = (xy.x(), xy.y(), wh.x(), wh.y()) if (px in range(x, w) or py in range(y, h)): self.setWindowOpacity(0.9) self.beginFade()
def start(self): self.setGeometry(0, 0, self.parent().width(), self.parent().height()) self.setVisible(True) # Prevent any actions from being triggerred by key presses self.parent().setEnabled(False) self.raise_() self.setFocus(Qt.FocusReason.OtherFocusReason) self.pi.startAnimation() QApplication.setOverrideCursor(QCursor(Qt.CursorShape.WaitCursor))
def mousePressEvent(self, event): try: if event.button() == Qt.LeftButton: self.m_flag = True self.m_Position = event.globalPos() - self.pos() event.accept() self.setCursor(QCursor(Qt.OpenHandCursor)) except: pass
def __init__(self, texto): super().__init__() self.__config = MenuConfigLoader() self.setFixedSize(self.__config.width_botoes, self.__config.height_botoes) self.setFont( QFont(self.__config.fonte_botoes, self.__config.tamanho_fonte_botoes)) self.setText(texto) self.setCursor(QCursor(Qt.PointingHandCursor))
def dispatcher(self): container = self.current_container # The book being edited as a container object if not container: return info_dialog(self.gui, _('No book open'), _('Need to have a book open first.'), show=True) self.filesChanged = False self.changed_files = [] from calibre_plugins.horver.dialogs import ConversionDialog from calibre_plugins.horver.resources.dialogs import ResultsDialog dlg = ConversionDialog(self.gui) if dlg.exec_(): criteria = dlg.getCriteria() # Ensure any in progress editing the user is doing is present in the container self.boss.commit_all_editors_to_container() self.boss.add_savepoint(_('Before: Text Conversion')) try: conversion = get_configuration(criteria) if conversion == 'None': info_dialog(self.gui, _('No Changes'), _('The output configuration selected is not supported.\n Please use a different input/output style combination'), show=True) else: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QApplication.processEvents() if conversion != 'no_conversion': self.converter.set_conversion(get_configuration(criteria)) self.process_files(criteria) QApplication.restoreOverrideCursor() except Exception: QApplication.restoreOverrideCursor() # Something bad happened report the error to the user import traceback error_dialog(self.gui, _('Failed'), _('Failed to convert Chinese, click "Show details" for more info'), det_msg=traceback.format_exc(), show=True) # Revert to the saved restore point self.boss.revert_requested(self.boss.global_undo.previous_container) else: if self.filesChanged: # Show the user what changes we have made, # allowing then to revert them if necessary accepted = ResultsDialog(self.gui, self.changed_files).exec_() if accepted == QDialog.Accepted: self.boss.show_current_diff() # Update the editor UI to take into account all the changes we # have made self.boss.apply_container_update_to_gui() elif conversion != 'None': info_dialog(self.gui, _('No Changes'), _('No text meeting your criteria was found to change.\nNo changes made.'), show=True)
def createMovement(self, inLayout, onPressed, onReleased): controls0 = [] controls1 = [] for i in range(3): layout0 = QHBoxLayout() slider = QFloatSlider(Qt.Horizontal, self) slider.setRange(-50.0, 50.0, 101) slider.setFloatValue(0.0) slider.floatValueChanged.connect( lambda value, slider=slider, i=i: QToolTip.showText( QCursor.pos(), "T" + chr(88 + i) + ": %f" % (value), None)) slider.sliderPressed.connect(lambda i=i: onPressed(0, i)) slider.sliderReleased.connect(lambda i=i: onReleased(0, i)) layout0.addWidget(slider) controls0.append(slider) label = QLabel("T" + chr(88 + i)) layout0.addWidget(label) inLayout.addItem(layout0) layout1 = QHBoxLayout() slider = QFloatSlider(Qt.Horizontal, self) slider.setRange(-45.0, 45.0, 91) slider.setFloatValue(0.0) slider.floatValueChanged.connect( lambda value, slider=slider, i=i: QToolTip.showText( QCursor.pos(), "R" + chr(88 + i) + ": %f" % (value), None)) slider.sliderPressed.connect( lambda i=i, slider=slider: onPressed(1, i)) slider.sliderReleased.connect( lambda i=i, slider=slider: onReleased(1, i)) layout1.addWidget(slider) label = QLabel("R" + chr(88 + i)) layout1.addWidget(label) controls1.append(slider) inLayout.addItem(layout1) return controls0, controls1
def createMisAlignment(self, mis_layout, callback): controls0 = [] controls1 = [] for i in range(3): # Translation layout0 = QHBoxLayout() slider = QFloatSlider(Qt.Horizontal, self) slider.setRange(-50.0, 50.0, 101) slider.setFloatValue(0.0) slider.floatValueChanged.connect(lambda value: QToolTip.showText( QCursor.pos(), "%f" % (value), None)) button = QToolButton() act = QAction() act.setText("T" + chr(88 + i)) button.setDefaultAction(act) button.clicked.connect(callback) layout0.addWidget(slider) layout0.addWidget(button) controls0.append((slider, button)) # Rotation layout1 = QHBoxLayout() slider = QFloatSlider(Qt.Horizontal, self) slider.setRange(-90.0, 90.0, 37) slider.setFloatValue(0.0) slider.floatValueChanged.connect(lambda value: QToolTip.showText( QCursor.pos(), "%f" % (value), None)) button = QToolButton() act = QAction() act.setText("R" + chr(88 + i)) button.setDefaultAction(act) button.clicked.connect(callback) layout1.addWidget(slider) layout1.addWidget(button) mis_layout.addItem(layout0) mis_layout.addItem(layout1) controls1.append((slider, button)) return controls0 + controls1
def eventFilter(self, qobject, qevent): qtype = qevent.type() # print("qtype",qtype) # print("qobject",qobject) if qtype == 82: counter = len(self.lw_main.selectedIndexes()) # 右键所在的位置又可能是空白处 if counter == 1: i = self.lw_main.indexAt(QCursor.pos()) if not i.isValid(): print("valid") counter = len(self.lw_main.selectedIndexes()) else: print("invalid") # 处理选中的文件 if counter >= 1: action = self.file_menu.exec_(self.file_popup_menu.menu_item, QCursor.pos()) if action: file_list = [ self.fileSystemModel.itemData(i)[0] for i in self.lw_main.selectedIndexes() ] self.script_manager.run_script(action.text(), self.le_path.text(), file_list) # 选中空白处,返回上层目录 else: parent_dir = dirname(self.le_path.text()) if parent_dir == self.le_path.text() and self.isWindowsOS: pass else: self.le_path.setText(parent_dir) self.on_pb_load_path_clicked() return False
def eventFilter(self, qobject, qevent): qtype = qevent.type() print(qtype) action = None if qtype == QEvent.HoverEnter: if qobject == self.pb_bold: action = self.popMenu.exec_(listActionHandler.bold, QCursor.pos()) elif qobject == self.pb_heading: action = self.popMenu.exec_(listActionHandler.headdings, QCursor.pos()) elif qobject == self.pb_unsort_list: action = self.popMenu.exec_(listActionHandler.unsort_lists, QCursor.pos()) if action: print(action.text()) listActionHandler.handle_action(action, self.te_editor.textCursor()) # ~ elif qtype == QEvent.Leave: else: pass # ~ print("leave") # ~ self.popMenu.close() return False
def show_context_menu(self): menu = QMenu(self) item = self.current_item() if not item: return actions = list() file_menu = menu.addMenu(QIcon("res/delete.svg"), "File operations") delete_action = QAction(QIcon("res/delete.svg"), "Delete", file_menu) actions.append(delete_action) file_menu.addActions(actions) file_menu.setEnabled(True) menu.setEnabled(True) action = menu.exec_(QCursor.pos())
def contextMenuEvent(self, event): """ Item右键点击事件 """ self._rightClickPoint = event.pos() item = self.itemAt(self._rightClickPoint) self._tableCountAction.setText('行: {0}, 列: {1}'.format( self.rowCount(), self.columnCount())) if item is None: self._markAction.setEnabled(False) self._highlightAction.setEnabled(False) else: itemState = 0 # 0: not marked or highlighted, 1: marked, 2: highlighted if self._markedItem is not None and self._markedItem.row( ) == item.row(): itemState = 1 else: for highlightedItem in self._highlightedItems: if highlightedItem[0].row() == item.row(): itemState = 2 if itemState == 0: self._markAction.setText('标记') self._markAction.setEnabled(True) self._highlightAction.setText('高亮') self._highlightAction.setEnabled(True) elif itemState == 1: self._markAction.setText('取消标记') self._markAction.setEnabled(True) self._highlightAction.setEnabled(False) else: self._highlightAction.setText('取消高亮') self._highlightAction.setEnabled(True) self._markAction.setEnabled(False) # at last, set visible mark action if self._markedItem is not None: self._visibleMarkAction.setText('定位标记') self._visibleMarkAction.setEnabled(True) else: self._visibleMarkAction.setEnabled(False) self._itemMenu.popup(QCursor.pos())
def accept(self): folder = self.ui.LoadFolderPath.text() if not (os.path.exists(folder) and (os.path.isdir(folder))): QtWidgets.QMessageBox.information( None, "エラー", "指定したフォルダ「" + folder + "」が見つかりませんでした。", QMessageBox.Ok) return filelist = glob.glob(folder + "\*.zip") if len(filelist) == 0: QtWidgets.QMessageBox.information(None, "エラー", "zipファイルは見つかりませんでした。", QMessageBox.Ok) return QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) try: for z in filelist: with zipfile.ZipFile(z, 'r') as zf: decomp = zf.namelist() if len(decomp) == 0: self.ui.LogViewer.append("「" + zipfilename + "」内にファイルが見つかりませんでした。") continue for dfile in decomp: with zf.open(dfile, 'r') as file: gmldem = JpGisGML() text = file.read().decode('utf_8') gmldem.ReadText(text) gmldem.ToGeoTiff(folder) self.ui.LogViewer.append(dfile + " :終了") QApplication.processEvents( QEventLoop.ExcludeUserInputEvents) finally: QApplication.restoreOverrideCursor() QtWidgets.QMessageBox.information(None, "終了", "終了しました。", QMessageBox.Ok)
def __enter__(self): QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
def rehighlight(self): QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QSyntaxHighlighter.rehighlight(self) QApplication.restoreOverrideCursor()
def collapse_menu_hovered(self, action): tip = action.toolTip() if tip == '*': tip = '' QToolTip.showText(QCursor.pos(), tip)
def mouseReleaseEvent(self, QMouseEvent): self.m_flag = False self.setCursor(QCursor(Qt.ArrowCursor))
def exec(self, x = None, y = None): if x is None: super(Menu, self).exec(QCursor.pos()) else: super(Menu, self).exec(QPoint(x, y))
def contextMenuEvent(self, event): """右键点击事件""" self._menu.popup(QCursor.pos())
def sample_pos(self,time_): self.mouse_positions[time_]=QCursor.pos()
def sample_direction(self,time_): if len(self.mouse_positions)>1: self.mouse_positions[time_]=QCursor.pos()