def seed_img(self, is_seed = True): if is_seed: try: cseed = self.get_seed() except UserCancelled: return except InvalidPassword as e: self.d.show_error(str(e)) return if not cseed: self.d.show_message(_("This wallet has no seed")) return txt = cseed.upper() else: txt = self.txt.upper() img = QImage(self.SIZE[0], self.SIZE[1], QImage.Format_Mono) bitmap = QBitmap.fromImage(img, Qt.MonoOnly) bitmap.fill(Qt.white) painter = QPainter() painter.begin(bitmap) QFontDatabase.addApplicationFont(os.path.join(os.path.dirname(__file__), 'SourceSansPro-Bold.otf') ) if len(txt) < 102 : fontsize = 15 linespace = 15 max_letters = 17 max_lines = 6 max_words = 3 else: fontsize = 12 linespace = 10 max_letters = 21 max_lines = 9 max_words = int(max_letters/4) font = QFont('Source Sans Pro', fontsize, QFont.Bold) font.setLetterSpacing(QFont.PercentageSpacing, 100) font.setPixelSize(fontsize) painter.setFont(font) seed_array = txt.split(' ') for n in range(max_lines): nwords = max_words temp_seed = seed_array[:nwords] while len(' '.join(map(str, temp_seed))) > max_letters: nwords = nwords - 1 temp_seed = seed_array[:nwords] painter.drawText(QRect(0, linespace*n , self.SIZE[0], self.SIZE[1]), Qt.AlignHCenter, ' '.join(map(str, temp_seed))) del seed_array[:nwords] painter.end() img = bitmap.toImage() if (self.rawnoise == False): self.make_rawnoise() self.make_cypherseed(img, self.rawnoise, False, is_seed) return img
class Winform(QWidget): def __init__(self,parent=None): super(Winform,self).__init__(parent) self.setWindowTitle("不规则窗体的实现例子") self.pix = QBitmap("./images/mask.png") self.resize(self.pix.size()) self.setMask(self.pix) def paintEvent(self,event): painter = QPainter(self) #在指定区域直接绘制窗口背景 painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),QPixmap("./images/screen1.jpg"))
def make_cypherseed(self, img, rawnoise, calibration=False, is_seed = True): img = img.convertToFormat(QImage.Format_Mono) p = QPainter() p.begin(img) p.setCompositionMode(26) #xor p.drawImage(0, 0, rawnoise) p.end() cypherseed = self.pixelcode_2x2(img) cypherseed = QBitmap.fromImage(cypherseed) cypherseed = cypherseed.scaled(self.f_size, Qt.KeepAspectRatio) cypherseed = self.overlay_marks(cypherseed, True, calibration) if not is_seed: self.filename_prefix = 'custom_secret_' self.was = _('Custom secret') else: self.filename_prefix = self.wallet_name + '_seed_' self.was = self.wallet_name + ' ' + _('seed') if self.extension: self.ext_warning(self.c_dialog) if not calibration: self.toPdf(QImage(cypherseed)) QDesktopServices.openUrl(QUrl.fromLocalFile(self.get_path_to_revealer_file('.pdf'))) cypherseed.save(self.get_path_to_revealer_file('.png')) self.bcrypt(self.c_dialog) return cypherseed
def __init__(self,parent=None): super(Winform,self).__init__(parent) self.setWindowTitle("不规则窗体的实现例子") self.pix = QBitmap("./images/mask.png") self.resize(self.pix.size()) self.setMask(self.pix)
def calibration(self): img = QImage(self.SIZE[0], self.SIZE[1], QImage.Format_Mono) bitmap = QBitmap.fromImage(img, Qt.MonoOnly) bitmap.fill(Qt.black) self.make_calnoise() img = self.overlay_marks(self.calnoise.scaledToHeight(self.f_size.height()), False, True) self.calibration_pdf(img) QDesktopServices.openUrl(QUrl.fromLocalFile(self.get_path_to_calibration_file())) return img
def make_revealer(self): revealer = self.pixelcode_2x2(self.rawnoise) revealer.invertPixels() revealer = QBitmap.fromImage(revealer) revealer = revealer.scaled(self.f_size, Qt.KeepAspectRatio) revealer = self.overlay_marks(revealer) self.filename_prefix = 'revealer_' revealer.save(self.get_path_to_revealer_file('.png')) self.toPdf(QImage(revealer)) QDesktopServices.openUrl(QUrl.fromLocalFile(self.get_path_to_revealer_file('.pdf')))
def calibration(self): img = QImage(self.SIZE[0], self.SIZE[1], QImage.Format_Mono) bitmap = QBitmap.fromImage(img, Qt.MonoOnly) bitmap.fill(Qt.black) self.make_calnoise() img = self.overlay_marks( self.calnoise.scaledToHeight(self.f_size.height()), False, True) self.calibration_pdf(img) QDesktopServices.openUrl( QUrl.fromLocalFile(self.get_path_to_calibration_file())) return img
def setWindowRadius(self, n_px): """ 圆边 :param n_px: 弧度 :return: """ objBitmap = QBitmap(self.size()) painter = QPainter(objBitmap) painter.setBrush(QColor(0, 0, 0)) painter.drawRoundedRect(self.rect(), n_px, n_px) self.setMask(objBitmap)
class ShapeWidget(QWidget): def __init__(self, parent=None): super(ShapeWidget, self).__init__(parent) self.setWindowTitle("不规则的,可以拖动的窗体实现例子") self.mypix() # 显示不规则 pic def mypix(self): self.pix = QBitmap("./images/mask.png") self.resize(self.pix.size()) self.setMask(self.pix) print(self.pix.size()) self.dragPosition = None # 重定义鼠标按下响应函数mousePressEvent(QMouseEvent)和鼠标移动响应函数mouseMoveEvent(QMouseEvent),使不规则窗体能响应鼠标事件,随意拖动。 def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.m_drag = True self.m_DragPosition = event.globalPos() - self.pos() event.accept() self.setCursor(QCursor(Qt.OpenHandCursor)) if event.button() == Qt.RightButton: self.close() def mouseMoveEvent(self, QMouseEvent): if Qt.LeftButton and self.m_drag: # 当左键移动窗体修改偏移值 self.move(QMouseEvent.globalPos() - self.m_DragPosition) QMouseEvent.accept() def mouseReleaseEvent(self, QMouseEvent): self.m_drag = False self.setCursor(QCursor(Qt.ArrowCursor)) #一般 paintEvent 在窗体首次绘制加载, 要重新加载paintEvent 需要重新加载窗口使用 self.update() or self.repaint() def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0, 0, self.width(), self.height(), QPixmap("./images/boy.png"))
def loadFromImage(self, image, fileName): self.mImageSource = fileName if (image.isNull()): self.mImage = QPixmap() return False self.mImage = QPixmap.fromImage(image) if (self.mTransparentColor.isValid()): mask = image.createMaskFromColor(self.mTransparentColor.rgb()) self.mImage.setMask(QBitmap.fromImage(mask)) return True
def make_revealer(self): revealer = self.pixelcode_2x2(self.rawnoise) revealer.invertPixels() revealer = QBitmap.fromImage(revealer) revealer = revealer.scaled(self.f_size, Qt.KeepAspectRatio) revealer = self.overlay_marks(revealer) self.filename_prefix = 'revealer_' revealer.save(self.get_path_to_revealer_file('.png')) self.toPdf(QImage(revealer)) QDesktopServices.openUrl( QUrl.fromLocalFile(self.get_path_to_revealer_file('.pdf')))
def __init__(self, parent): super(Ui_ScShot_Logic, self).__init__() self.setupUi(self) # 加载设计师画的界面 self.p = parent # 主窗口设置 self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) # 隐藏标题栏 self.pixPrtSc = QApplication.primaryScreen().grabWindow(QApplication.desktop().winId()) # 截取整个屏幕(QPixmap类型) self.resize(self.pixPrtSc.size()) # 设置主窗口大小 p = QPalette() p.setBrush(self.backgroundRole(), QBrush(self.pixPrtSc)) self.setPalette(p) # 设置主窗口背景 self.flagDrawing = False # 主窗口的鼠标拖动标记,已经为子 self.wid = QLabel(self) self.wid.lower() # self.wid.raise_() # 最上层 self.wid.resize(self.size()) self.wid.move(0, 0) self.wid.setStyleSheet('border:3px solid #00FFFF;') # self.wid.hide() # 阴影容器设置 self.wTop.resize(self.size()) # 设置wTop也为屏幕大小 self.blackMask = QBitmap(self.size()) # 创建位图,全屏大小 self.blackMask.fill(Qt.black) # 填充位图为全黑。显示效果为原本wTop的背影,如果全白,相当于把wTop擦掉了。 self.wTop.setMask(self.blackMask) # 设置self.wTop的遮罩为self.blackMask self.wTop.enterEvent = self.wTop_EnterEvent # 设置wTop的鼠标进入事件。事件内有详细注释。 self.flagWTopEnter = False # wTop的鼠标进入事件的标记 # 其它需要初始化的 self.btnOk.clicked.connect(self.slot_ScShot_btns) self.btnSaveAs.clicked.connect(self.slot_ScShot_btns) self.wFunc.hide() # 先隐藏功能按钮容器 self.wInfo.hide() # 本来可以不用隐藏,再让后面显示,但是那样它会闪一下。因为原来的位置是在Qt设计师中乱放的。 self.strDpi = "0 x 0" self.flag = False
def get_mask(self): # Mask 생성. QBitmap 변환을 위해서 not 연산 mask = cv.bitwise_not(self._mask) # QImage 로 변환하기위해 convert color mask = cv.cvtColor(mask, cv.COLOR_BGR2RGB) # QImage 생성 height, width = self._mask.shape[:2] mono = QImage(mask, width, height, QImage.Format_RGB888) # QBitmap 생성 bitmap = QBitmap(width, height).fromImage(mono) return bitmap
def __init__(self,MW,pos,img): super().__init__() self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.setStyleSheet('''background-color:black; ''') self.setWindowOpacity(0.5) #设置透明度 self.parent=MW # self.pix = QBitmap("Images/mask.png") # 蒙版 self.pix =QBitmap("Images/mask.png") # 蒙版 self.sw=float(img.width())/self.pix.width() self.sh=float(img.height())/self.pix.height() print(self.pix.size()) self.pix=self.pix.transformed(QTransform().scale(self.sw, self.sh)) self.resize(self.pix.size()) # 设置当前GUI主界面和蒙版图片一致 print(self.pix.size()) self.move(pos) self.spx=5 self.spy=5 self.epx=400 self.epy=100 self.startPoint=QPoint(0,0) self.endPoint=QPoint(0,0) self.m_flag=False self.show()
def autocrop(q_image, q_color): """Automatically crop a qt image around the pixels not of a given color. Args: q_image (QImage): q_color (QColor): Returns: QImage: A newly cropped Qt image. The passed-in image is left unmodified. """ mask = q_image.createMaskFromColor(q_color.rgb(), _QT_MASK_IN_COLOR) crop_rect = QRegion(QBitmap.fromImage(mask)).boundingRect() return q_image.copy(crop_rect)
def mouseReleaseEvent(self, event): if event.button() == Qt.LeftButton: self.endPoint = event.pos() self.paintMask() # 确保mask绘制完整 self.isDrawing = False if self.endPoint.x() - self.startPoint.x() > 10 and self.endPoint.y( ) - self.startPoint.y() > 10: # 框选区域太小或从右至左框选不进行截图 self.screenshot = self.screenshot_full_screen.copy( QRect(self.startPoint, self.endPoint)) # 截取框选区域 self.hide() # 隐藏抓取工具窗口 self.screenshotWindow.close() # 关闭全屏截图显示窗口 self.sigDisplay.emit() # 触发信号创建新的子窗口来显示截图 self.setMask(QBitmap((self.blackMask.copy()))) # 框选操作结束, 恢复窗口mask
def autoCropRect(image): """Return a QRect specifying the contents of the QImage. Edges of the image are trimmed if they have the same color. """ # pick the color at most of the corners colors = collections.defaultdict(int) w, h = image.width(), image.height() for x, y in (0, 0), (w - 1, 0), (w - 1, h - 1), (0, h - 1): colors[image.pixel(x, y)] += 1 most = max(colors, key=colors.get) # let Qt do the masking work mask = image.createMaskFromColor(most) return QRegion(QBitmap.fromImage(mask)).boundingRect()
def autoCropRect(image): """Returns a QRect specifying the contents of the QImage. Edges of the image are trimmed if they have the same color. """ # pick the color at most of the corners colors = collections.defaultdict(int) w, h = image.width(), image.height() for x, y in (0, 0), (w - 1, 0), (w - 1, h - 1), (0, h - 1): colors[image.pixel(x, y)] += 1 most = max(colors, key=colors.get) # let Qt do the masking work mask = image.createMaskFromColor(most) return QRegion(QBitmap.fromImage(mask)).boundingRect()
def load_img(self, c): global counter counter += 1 imager = Imager(self.state["Title"], self.state["Artist"]) data = imager.get_data() if (c + 1 != counter): return pixmap = QPixmap() pixmap.loadFromData(data) map = QBitmap(pixmap.size()) map.fill(Qt.color0) painter = QPainter(map) painter.setBrush(Qt.color1) painter.drawRoundedRect(0, 0, pixmap.width(), pixmap.height(), 10, 10) painter.end() self.app.label.setScaledContents(True) pixmap.setMask(map) self.app.label.setPixmap( pixmap.scaled(self.app.label.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation))
def paintEvent(self, event): try: if self.isDrawing: self.mask = self.blackMask.copy() pp = QPainter(self.mask) pen = QPen() pen.setStyle(Qt.NoPen) pp.setPen(pen) brush = QBrush(Qt.white) pp.setBrush(brush) pp.drawRect(QRect(self.startPoint, self.endPoint)) self.setMask(QBitmap(self.mask)) except Exception: write_error(format_exc())
def __init__(self): super().__init__() self.setWindowTitle('窗体') print(self.windowTitle()) self.setGeometry(100, 100, 400, 300) print(self.size()) print(self.pos()) print(self.geometry()) # 使用内置光标 # 使用CursorShape类型 self.setCursor(Qt.ForbiddenCursor) self.setCursor(Qt.CursorShape(Qt.ForbiddenCursor)) self.setCursor(Qt.CursorShape(14)) # 不能直接使用整数14,必须是CursorShape类型或者QCursor类型 print(Qt.ForbiddenCursor, type(Qt.ForbiddenCursor)) print(self.cursor(), type(self.cursor())) # 使用QCursor类型 self.setCursor(QCursor(Qt.ForbiddenCursor)) # 使用图像光标-Bitmap(不支持透明光标) bp = QBitmap('ico.png') bp = bp.scaled(30, 30) # 缩小 self.setCursor(QCursor(bp)) # 使用图像光标-Pixmap(支持透明) px = QPixmap('ico.png') px = px.scaled(30, 30) # 缩小 self.setCursor(QCursor(px)) # 图标与图标文本 self.setWindowIcon(QIcon('ico.png')) self.setWindowIconText('图标文本') print(self.windowIcon()) print(self.windowIconText())
def loadFromImage(self, *args): l = len(args) if l==2: image, fileName = args tileSize = self.tileSize() margin = self.margin() spacing = self.tileSpacing() if (image.isNull()): return False stopWidth = image.width() - tileSize.width() stopHeight = image.height() - tileSize.height() oldTilesetSize = self.tileCount() tileNum = 0 for y in range(margin, stopHeight+1, tileSize.height() + spacing): for x in range(margin, stopWidth+1, tileSize.width() + spacing): tileImage = image.copy(x, y, tileSize.width(), tileSize.height()) tilePixmap = QPixmap.fromImage(tileImage) if (self.mTransparentColor.isValid()): mask = tileImage.createMaskFromColor(self.mTransparentColor.rgb()) tilePixmap.setMask(QBitmap.fromImage(mask)) if (tileNum < oldTilesetSize): self.mTiles.at(tileNum).setImage(tilePixmap) else: self.mTiles.append(Tile(tilePixmap, tileNum, self)) tileNum += 1 # Blank out any remaining tiles to avoid confusion while (tileNum < oldTilesetSize): tilePixmap = QPixmap(tileSize) tilePixmap.fill() self.mTiles.at(tileNum).setImage(tilePixmap) tileNum += 1 self.mImageWidth = image.width() self.mImageHeight = image.height() self.mColumnCount = self.columnCountForWidth(self.mImageWidth) self.mImageSource = fileName return True elif l==1: ## # Convenience override that loads the image using the QImage constructor. ## fileName = args[0] return self.loadFromImage(QImage(fileName), fileName)
def __updateMask(self): opt = QStyleOption() opt.initFrom(self) rect = opt.rect size = rect.size() mask = QBitmap(size) p = QPainter(mask) p.setRenderHint(QPainter.Antialiasing) p.setBrush(Qt.black) p.setPen(Qt.NoPen) p.drawRoundedRect(rect, self.__radius, self.__radius) p.end() self.setMask(mask)
def paintPixmap(self): # 重置遮罩图像 self.pixmap.fill() # 创建绘制用的QPainter,笔画粗细为2像素 # 事先已经在Qt窗体上铺了一个蓝色的背景图片,因此投过遮罩图案看下去标记线条是蓝色的 p = QPainter(self.pixmap) p.setPen(QPen(QBrush(QColor(0, 0, 0)), 2)) for row in range(self.result.shape[0]): for col in range(self.result.shape[1]): if self.result[row][col] != 0: # 定一个基点,避免算数太难看 base_l_x = self.ANCHOR_LEFT_X + self.CLIP_WIDTH * col base_r_x = self.ANCHOR_RIGHT_X + self.CLIP_WIDTH * col base_y = self.ANCHOR_Y + self.CLIP_HEIGHT * row if row == 0 or self.result[row - 1][col] == 0: # 如果是第一行,或者上面的格子为空,画一条上边 p.drawLine(base_l_x, base_y, base_l_x + self.CLIP_WIDTH, base_y) p.drawLine(base_r_x, base_y, base_r_x + self.CLIP_WIDTH, base_y) if row == len(self.result) - 1 or self.result[row + 1][col] == 0: # 如果是最后一行,或者下面的格子为空,画一条下边 p.drawLine(base_l_x, base_y + self.CLIP_HEIGHT, base_l_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT) p.drawLine(base_r_x, base_y + self.CLIP_HEIGHT, base_r_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT) if col == 0 or self.result[row][col - 1] == 0: # 如果是第一列,或者左边的格子为空,画一条左边 p.drawLine(base_l_x, base_y, base_l_x, base_y + self.CLIP_HEIGHT) p.drawLine(base_r_x, base_y, base_r_x, base_y + self.CLIP_HEIGHT) if col == len(self.result[0]) - 1 or self.result[row][col + 1] == 0: # 如果是第一列,或者右边的格子为空,画一条右边 p.drawLine(base_l_x + self.CLIP_WIDTH, base_y, base_l_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT) p.drawLine(base_r_x + self.CLIP_WIDTH, base_y, base_r_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT) # 在遮罩上绘制按钮区域,避免按钮被遮罩挡住看不见 p.fillRect(self.btn_compare.geometry(), QBrush(QColor(0, 0, 0))) p.fillRect(self.btn_toggle.geometry(), QBrush(QColor(0, 0, 0))) # 将遮罩图像作为遮罩 self.setMask(QBitmap(self.pixmap))
def generate_scene(self, m: KLMap) -> None: '''Generate a QGraphicScene object from a map and fills up the scene_item_dict''' new_scene = QGraphicsScene(0, 0, m.w * TILE_SIZE, m.h * TILE_SIZE) self.setScene(new_scene) del self.scene_item_dict if self.m_scene: del self.m_scene self.m_scene = new_scene self.scene_item_dict = {} # set the background color <=> fill self.m_scene.setBackgroundBrush(Qt.black) pix = QPixmap(TILE_SIZE, TILE_SIZE) mask = QBitmap(TILE_SIZE, TILE_SIZE) for x in range(m.w): for y in range(m.h): pid = m.pid(x, y) if pid == Piece.space: continue # We pass the pixmap and bitmap object to avoid recreating them # on each function call self.set_tile_pix(pix, mask, x, y) item = QGraphicsPixmapItem(pix) item.setX(x * TILE_SIZE) item.setY(y * TILE_SIZE) self.m_scene.addItem(item) # moving tiles are above walls, special walls # and goals if pid == Piece.goal or pid == Piece.wall or pid == Piece.s_wall: item.setZValue(1) else: item.setZValue(10) if pid not in self.scene_item_dict: self.scene_item_dict[pid] = [] self.scene_item_dict[pid].append(item) item.show()
def paintEvent(self, event): if not self.my_visible: self.move(-2000, -2000) self.pixmap.fill() p = QPainter(self.pixmap) p.setPen(QPen(QBrush(QColor(0, 0, 0)), 2)) for row in range(len(self.result)): for col in range(len(self.result[0])): if self.result[row][col] != 0: # 定一个基点,避免算数太难看 base_l_x = self.ANCHOR_LEFT_X + self.CLIP_WIDTH * col base_r_x = self.ANCHOR_RIGHT_X + self.CLIP_WIDTH * col base_y = self.ANCHOR_Y + self.CLIP_HEIGHT * row if row == 0 or self.result[row - 1][col] == 0: # 如果是第一行,或者上面的格子为空,画一条上边 p.drawLine(base_l_x, base_y, base_l_x + self.CLIP_WIDTH, base_y) p.drawLine(base_r_x, base_y, base_r_x + self.CLIP_WIDTH, base_y) if row == len(self.result) - 1 or self.result[row + 1][col] == 0: # 如果是最后一行,或者下面的格子为空,画一条下边 p.drawLine(base_l_x, base_y + self.CLIP_HEIGHT, base_l_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT) p.drawLine(base_r_x, base_y + self.CLIP_HEIGHT, base_r_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT) if col == 0 or self.result[row][col - 1] == 0: # 如果是第一列,或者左边的格子为空,画一条左边 p.drawLine(base_l_x, base_y, base_l_x, base_y + self.CLIP_HEIGHT) p.drawLine(base_r_x, base_y, base_r_x, base_y + self.CLIP_HEIGHT) if col == len(self.result[0]) - 1 or self.result[row][col + 1] == 0: # 如果是第一列,或者右边的格子为空,画一条右边 p.drawLine(base_l_x + self.CLIP_WIDTH, base_y, base_l_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT) p.drawLine(base_r_x + self.CLIP_WIDTH, base_y, base_r_x + self.CLIP_WIDTH, base_y + self.CLIP_HEIGHT) p.fillRect(self.btn_compare.geometry(), QBrush(QColor(0, 0, 0))) p.fillRect(self.btn_toggle.geometry(), QBrush(QColor(0, 0, 0))) self.setMask(QBitmap(self.pixmap))
class MainWindow(QWidget): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setWindowTitle("MainWindow") self.mypix() # 显示不规则 pic def mypix(self): self.pix = QBitmap("./images/mask.png") self.resize(self.pix.size()) self.setMask(self.pix) self.dragPosition = None def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.m_drag = True self.m_DragPosition = event.globalPos() - self.pos() event.accept() self.setCursor(QCursor(Qt.OpenHandCursor)) if event.button() == Qt.RightButton: self.close() def mouseMoveEvent(self, QMouseEvent): if Qt.LeftButton and self.m_drag: # 当左键移动窗体修改偏移值 self.move(QMouseEvent.globalPos() - self.m_DragPosition) QMouseEvent.accept() def mouseReleaseEvent(self, QMouseEvent): self.m_drag = False self.setCursor(QCursor(Qt.ArrowCursor)) def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0, 0, self.width(), self.height(), QPixmap("./images/boy.png"))
def read_and_convert_using_qt_to_raw_mono(handler, filename, hs_cols, hs_rows, invert=True): img = QImage(filename) if img.isNull(): handler.show_error(_('Could not load the image {} -- unknown format or other error').format(os.path.basename(filename))) return if (img.width(), img.height()) != (hs_cols, hs_rows): # do we need to scale it ? img = img.scaled(hs_cols, hs_rows, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) # force to our dest size. Note that IgnoreAspectRatio guarantess the right size. Ther other modes don't if img.isNull() or (img.width(), img.height()) != (hs_cols, hs_rows): handler.show_error(_("Could not scale image to {} x {} pixels").format(hs_cols, hs_rows)) return bm = QBitmap.fromImage(img, Qt.MonoOnly) # ensures 1bpp, dithers any colors if bm.isNull(): handler.show_error(_('Could not convert image to monochrome')) return target_fmt = QImage.Format_Mono img = bm.toImage().convertToFormat(target_fmt, Qt.MonoOnly|Qt.ThresholdDither|Qt.AvoidDither) # ensures MSB bytes again (above steps may have twiddled the bytes) lineSzOut = hs_cols // 8 # bits -> num bytes per line bimg = bytearray(hs_rows * lineSzOut) # 1024 bytes for a 128x64 img bpl = img.bytesPerLine() if bpl < lineSzOut: handler.show_error(_("Internal error converting image")) return # read in 1 scan line at a time since the scan lines may be > our target packed image for row in range(hs_rows): # copy image scanlines 1 line at a time to destination buffer ucharptr = img.constScanLine(row) # returned type is basically void* ucharptr.setsize(bpl) # inform python how big this C array is b = bytes(ucharptr) # aaand.. work with bytes. begin = row * lineSzOut end = begin + lineSzOut bimg[begin:end] = b[0:lineSzOut] if invert: for i in range(begin, end): bimg[i] = ~bimg[i] & 0xff # invert b/w return bytes(bimg)
def __init__(self, widget): super(QImageViewer, self).__init__() self.mainWindow = utils.get_app() # Image is displayed as a QPixmap in a QGraphicsScene attached to this QGraphicsView. self.scene = QGraphicsScene() self.setScene(self.scene) # Store a local handle to the scene's current image pixmap. self._pixmapHandle = None # Image aspect ratio mode. # !!! ONLY applies to full image. Aspect ratio is always ignored when zooming. # Qt.IgnoreAspectRatio: Scale image to fit viewport. # Qt.KeepAspectRatio: Scale image to fit inside viewport, preserving aspect ratio. # Qt.KeepAspectRatioByExpanding: Scale image to fill the viewport, preserving aspect ratio. self.aspectRatioMode = Qt.KeepAspectRatioByExpanding # Scroll bar behaviour. # Qt.ScrollBarAlwaysOff: Never shows a scroll bar. # Qt.ScrollBarAlwaysOn: Always shows a scroll bar. # Qt.ScrollBarAsNeeded: Shows a scroll bar only when zoomed. self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # Flags for enabling/disabling mouse interaction. self.KeyControl = False self.isPanning = False # Cursor settings cursorbit = QBitmap( QPixmap(utils.get_path(["iconImages", "CursorBit.png"]))) cursormask = QBitmap( QPixmap(utils.get_path(["iconImages", "CursorMask.png"]))) self.crossHair = QCursor(cursorbit, cursormask, -1, -1) # self.setCursor(self.crossHair) # Mouse coordinate updates self.setMouseTracking(True) self.digitizerOn = False # Ty edit: anchor at mouse position self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) #self.setResizeAnchor(QGraphicsView.AnchorViewCenter) self.setResizeAnchor(QGraphicsView.AnchorUnderMouse) # Ty edit: record the zoom, pan, and others self.InitialFrame = True self.Zoom_recorder = 0 GlobalData.currentFrame = 1 GlobalData.totalFrames = 0 self.ViewRectX = 0 self.ViewRectY = 0 self.ViewRectWidth = 0 self.ViewRectHeight = 0 # Ty keypoint drawing initialization self.SceneSize = 4.5 self.ViewSize = self.SceneSize * (4 / 5)**self.Zoom_recorder self.BoxDrawer = QPen(Qt.green) self.BoxDrawer.setWidth(0.01) self.BoxFill = QBrush(Qt.green) self.key_points = [] # Ty draw trail lines initialization self.displayLineOn = False self.LineDrawer = QPen(Qt.green) self.LineWidth = (4 / 5)**self.Zoom_recorder self.LineDrawer.setWidth(self.LineWidth) self.LinePath = []
class Suspension_window(QWidget): def __init__(self): super().__init__() self.setWindowFlags(Qt.FramelessWindowHint|Qt.Tool|Qt.WindowStaysOnTopHint) palette1 = QPalette() palette1.setColor(self.backgroundRole(), QColor(0,0,0)) # 设置背景颜色 self.setPalette(palette1) #self.setStyleSheet('QWidget{background-color:rgb(0,0,0)}') self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.rightMenuShow) self.setWindowOpacity(0.85) self.pix=QBitmap('./0.png') #蒙版 self.resize(self.pix.size()) self.setMask(self.pix) self.move(300, 300) self.initUI() QToolTip.setFont(QFont('SansSerif', 10)) self.show() def initUI(self): textcolot=QColor(255,255,255) margin=10 width=100 height=40 palette2 = QPalette() # 初始化 label0=QLabel("",self) label1=QLabel("↑1000KB/s",self) label2=QLabel("↓1000KB/s",self) label3=QLabel(" CPU 99%",self) label4=QLabel("内存 99%",self) label5=QLabel("",self) # 修改字体 label1.setFont(QFont("Roman times",10.5)) label2.setFont(QFont("Roman times",10.5)) label3.setFont(QFont("Roman times",10.5)) label4.setFont(QFont("Roman times",10.5)) # 对齐方式 label1.setAlignment(Qt.AlignVCenter|Qt.AlignLeft) label2.setAlignment(Qt.AlignVCenter|Qt.AlignLeft) label3.setAlignment(Qt.AlignVCenter|Qt.AlignLeft) label4.setAlignment(Qt.AlignVCenter|Qt.AlignLeft) # 调整大小 横,纵 label0.resize(Battery_width,80) label1.resize(width,height) label2.resize(width,height) label3.resize(width,height) label4.resize(width,height) label5.resize(Battery_width,80) # 调整位置 横,纵 label0.move(0,0) label1.move(Battery_width+margin,0) label2.move(Battery_width+margin,height) label3.move(Battery_width+margin+width+margin,0) label4.move(Battery_width+margin+width+margin,height) label5.move(0,0) # 设置颜色 palette2.setColor(QPalette.WindowText, textcolot) label1.setPalette(palette2) label2.setPalette(palette2) label3.setPalette(palette2) label4.setPalette(palette2) #开启监控 t = threading.Thread(target=set_hook,args=(label0,label1,label2,label3,label4,label5)) t.setDaemon(True) t.start() def mousePressEvent(self, event): if event.button()==Qt.LeftButton: self.m_flag=True self.m_Position=event.globalPos()-self.pos() #获取鼠标相对窗口的位置 event.accept() else: self.m_flag=False def mouseMoveEvent(self, QMouseEvent): if Qt.LeftButton and self.m_flag: self.move(QMouseEvent.globalPos()-self.m_Position)#更改窗口位置 QMouseEvent.accept() def mouseReleaseEvent(self, QMouseEvent): self.m_flag=False def rightMenuShow(self): try: self.contextMenu = QMenu() self.actionA = self.contextMenu.addAction(u'退出') self.contextMenu.popup(QCursor.pos()) # 菜单显示的位置 self.actionA.triggered.connect(exit) self.contextMenu.show() except Exception as e: print(e)
class WScreenShot(QWidget): storePath = 'screenShot.jpg' imageType = 'JPG' quality = 100 def __init__(self, parent=None): super(WScreenShot, self).__init__(parent) self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.setStyleSheet('''background-color:black; ''') self.setWindowOpacity(0.6) desktopRect = QDesktopWidget().screenGeometry() self.setGeometry(desktopRect) self.setCursor(Qt.CrossCursor) self.blackMask = QBitmap(desktopRect.size()) self.blackMask.fill(Qt.black) self.mask = self.blackMask.copy() self.isDrawing = False self.startPoint = QPoint() self.endPoint = QPoint() def paintEvent(self, event): if self.isDrawing: self.mask = self.blackMask.copy() pp = QPainter(self.mask) pen = QPen() pen.setStyle(Qt.NoPen) pp.setPen(pen) brush = QBrush(Qt.white) pp.setBrush(brush) pp.drawRect(QRect(self.startPoint, self.endPoint)) self.setMask(QBitmap(self.mask)) def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.startPoint = event.pos() self.endPoint = self.startPoint self.isDrawing = True def mouseMoveEvent(self, event): if self.isDrawing: self.endPoint = event.pos() self.update() def mouseReleaseEvent(self, event): if event.button() == Qt.LeftButton: self.endPoint = event.pos() screenShot = QApplication.primaryScreen().grabWindow( QApplication.desktop().winId()) rect = QRect(self.startPoint, self.endPoint) outputRegion = screenShot.copy(rect) outputRegion.save(self.storePath, format=self.imageType, quality=self.quality) self.close() def handleClick(self): if not self.isVisible(): self.show() def handleClose(self): self.close()
def seed_img(self, is_seed=True): if is_seed: try: cseed = self.get_seed() except UserCancelled: return except InvalidPassword as e: self.d.show_error(str(e)) return if not cseed: self.d.show_message(_("This wallet has no seed")) return txt = cseed.upper() else: txt = self.txt.upper() img = QImage(self.SIZE[0], self.SIZE[1], QImage.Format_Mono) bitmap = QBitmap.fromImage(img, Qt.MonoOnly) bitmap.fill(Qt.white) painter = QPainter() painter.begin(bitmap) QFontDatabase.addApplicationFont( os.path.join(os.path.dirname(__file__), 'SourceSansPro-Bold.otf')) if len(txt) < 102: fontsize = 15 linespace = 15 max_letters = 17 max_lines = 6 max_words = 3 else: fontsize = 12 linespace = 10 max_letters = 21 max_lines = 9 max_words = int(max_letters / 4) font = QFont('Source Sans Pro', fontsize, QFont.Bold) font.setLetterSpacing(QFont.PercentageSpacing, 100) font.setPixelSize(fontsize) painter.setFont(font) seed_array = txt.split(' ') for n in range(max_lines): nwords = max_words temp_seed = seed_array[:nwords] while len(' '.join(map(str, temp_seed))) > max_letters: nwords = nwords - 1 temp_seed = seed_array[:nwords] painter.drawText( QRect(0, linespace * n, self.SIZE[0], self.SIZE[1]), Qt.AlignHCenter, ' '.join(map(str, temp_seed))) del seed_array[:nwords] painter.end() img = bitmap.toImage() if (self.rawnoise == False): self.make_rawnoise() self.make_cypherseed(img, self.rawnoise, False, is_seed) return img
class GrabToolWindow(QWidget): """抓取工具窗口,显示在最前端""" sigDisplay = pyqtSignal() # 创建信号,用于新建贴图窗口 sigScreenShot = pyqtSignal() def __init__(self): super(GrabToolWindow, self).__init__() self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SplashScreen) # 无边框 置顶 不显示任务栏图标 self.setStyleSheet('''background-color:black; ''') self.setWindowOpacity(0.3) self.desktopRect = QDesktopWidget().screenGeometry() self.setGeometry(self.desktopRect) self.setCursor(Qt.CrossCursor) self.blackMask = QBitmap(self.desktopRect.size()) self.blackMask.fill(Qt.black) self.availTopLeftPoint = QDesktopWidget().availableGeometry().topLeft( ) # 有效显示区域左上角点 self.isDrawing = False self.startPoint = QPoint() self.endPoint = QPoint() self.hk1, self.hk2 = SystemHotkey(), SystemHotkey() # 初始化两个热键 # self.hk1.register(('control', '1'), callback=lambda x: self.showGrabWindow()) self.hk2.register(('control', 'shift', 'j'), callback=lambda x: self.showGrabWindow()) self.sigDisplay.connect(self.createDisplayWin) # 信号连接到子窗口创建函数 self.displayWinDict = {} self.displayWinNum = 0 self.sigScreenShot.connect(self.createScreenShotWin) def createDisplayWin(self): # 这里使用字典存储新建的窗口,当窗口关闭时未进行内存释放,可进行优化 self.displayWinDict[self.displayWinNum] = DisplayWindow( self.screenshot, self.startPoint + self.availTopLeftPoint, self.displayWinNum) self.displayWinDict[self.displayWinNum].show() self.displayWinNum += 1 def createScreenShotWin(self): self.screenshotWindow = ScreenshotWindow() self.screenshot_full_screen = self.screenshotWindow.screenShot self.screenshotWindow.show() def showGrabWindow(self): self.sigScreenShot.emit() # 创建并显示全屏截图窗口 self.activateWindow() # 激活窗口以在最顶部显示 self.setWindowState(Qt.WindowActive) # 设置为激活窗口,以便使用快捷键 self.show() # 显示抓取窗口(主窗口) def keyPressEvent(self, event): # Alt+Q键或ESC关闭窗口退出程序, Q键隐藏抓取窗口 if event.key() == Qt.Key_Escape: self.close(), exit(0) elif event.key() == Qt.Key_Q: if QApplication.keyboardModifiers() == Qt.AltModifier: self.close(), exit(0) else: self.hide() self.screenshotWindow.hide() def paintMask(self): self.mask = self.blackMask.copy() pp = QPainter(self.mask) pen = QPen() pen.setStyle(Qt.NoPen) pp.setPen(pen) brush = QBrush(Qt.white) pp.setBrush(brush) pp.drawRect(QRect(self.startPoint, self.endPoint)) self.setMask(QBitmap(self.mask)) self.update() def paintEvent(self, event): if self.isDrawing: self.paintMask() def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.isDrawing = True self.startPoint = event.pos() # 相对有效区域左上角点的坐标 self.endPoint = self.startPoint def mouseMoveEvent(self, event): if Qt.LeftButton and self.isDrawing: self.endPoint = event.pos() self.update() def mouseReleaseEvent(self, event): if event.button() == Qt.LeftButton: self.endPoint = event.pos() self.paintMask() # 确保mask绘制完整 self.isDrawing = False if self.endPoint.x() - self.startPoint.x() > 10 and self.endPoint.y( ) - self.startPoint.y() > 10: # 框选区域太小或从右至左框选不进行截图 self.screenshot = self.screenshot_full_screen.copy( QRect(self.startPoint, self.endPoint)) # 截取框选区域 self.hide() # 隐藏抓取工具窗口 self.screenshotWindow.close() # 关闭全屏截图显示窗口 self.sigDisplay.emit() # 触发信号创建新的子窗口来显示截图 self.setMask(QBitmap((self.blackMask.copy()))) # 框选操作结束, 恢复窗口mask
def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0, 0, 280, 390, QPixmap(r"./images/dog.jpg")) painter.drawPixmap(300, 0, 280, 390, QBitmap(r"./images/dog.jpg"))
def initUI(self): self.setWindowTitle("异形窗口") self.pix = QBitmap('./image/mask.png') self.resize(self.pix.size()) #设置mask self.setMask(self.pix)
def mypix(self): self.pix = QBitmap("./images/mask.png") self.resize(self.pix.size()) self.setMask(self.pix) self.dragPosition = None
def __init__(self, parent=None, f=Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint): super(PopupPaletteFrame, self).__init__(parent) self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.setAttribute(Qt.WA_NoSystemBackground, True) self.setAttribute(Qt.WA_TranslucentBackground, True) self.setGeometry(0, 0, 512, 512) self.offset = QPoint(0, 0) self.local_image = QImage(512, 512, QImage.Format_ARGB32) self.fgcolor = '#FFFFFF' self.bgcolor = '#000000' # This is how to load the merged image from a .kra file. ## import zipfile ## archive = zipfile.ZipFile(gImgDir + os.sep + 'myPopupPaletteWorkshop.kra', 'r') ## img_data = archive.read('mergedimage.png') ## img = QImage() ## img.loadFromData(img_data) ## self.texture = img self.texture = QImage(gImgDir + os.sep + 'colorwheel_pixel_palette.png') self.defaultblackwhiteImg = QImage(gImgDir + os.sep + 'defaultblackwhite10.png') self.switcharrowsImg = QImage(gImgDir + os.sep + 'switcharrows16.png') self.colorboxImg = QImage(gImgDir + os.sep + 'colorbox28.png') lHiColorDir = gShareDir + os.sep + 'icons' + os.sep + 'hicolor' # Text box. self.textbox = QTextEdit("Test QTextEdit", parent=self) self.textbox.move(192, 160) self.textbox.setGeometry(192, 160, 128, 32) # Big Button in middle. self.btnImage = btnImage = QImage(lHiColorDir + os.sep + '128x128' + os.sep + 'apps' + os.sep + 'calligrakrita.png') self.button = ImageButton(btnImage, btnImage, btnImage, self) self.button.move(256 - 64, 256 - 64) self.button.pressed.connect(self.buttonPressed) self.button.released.connect(self.buttonReleased) self.button.setToolTip('Right Click for Context Menu') self.button.setContextMenuPolicy(Qt.CustomContextMenu) self.button.customContextMenuRequested.connect(self.show_context_menu) # Create popup context menu. self._context_menu = QMenu(self) self._context_menu.addAction('Invert', self.invertTexture) self._context_menu.addAction('Mirror Horizontal', self.mirrorTextureHorizontal) self._context_menu.addAction('Mirror Vertical', self.mirrorTextureVertical) # 4 smaller buttons. self.btnImage1 = btnImage1 = QImage(lHiColorDir + os.sep + '32x32' + os.sep + 'apps' + os.sep + 'calligrakrita.png') self.button1 = ImageButton(btnImage1, btnImage1, btnImage1, self) self.button1.move(192, 320) self.button1.released.connect(self.button1Released) self.button1.setToolTip('test button') self.btnImage2 = btnImage2 = QImage(lHiColorDir + os.sep + '32x32' + os.sep + 'apps' + os.sep + 'calligrakrita.png') self.button2 = ImageButton(btnImage2, btnImage2, btnImage2, self) self.button2.move(224, 320) self.button2.released.connect(self.button2Released) self.button2.setToolTip('rotate_canvas_left') self.btnImage3 = btnImage3 = QImage(lHiColorDir + os.sep + '32x32' + os.sep + 'apps' + os.sep + 'calligrakrita.png') self.button3 = ImageButton(btnImage3, btnImage3, btnImage3, self) self.button3.move(256, 320) self.button3.released.connect(self.button3Released) self.button3.setToolTip('rotate_canvas_right') self.btnImage4 = btnImage4 = QImage(lHiColorDir + os.sep + '32x32' + os.sep + 'apps' + os.sep + 'calligrakrita.png') self.button4 = ImageButton(btnImage4, btnImage4, btnImage4, self) self.button4.move(288, 320) self.button4.released.connect(self.button4Released) self.button4.setToolTip('Im a painter button') # Fore/Back color stuff self.arrowsBtn = ImageButton(self.switcharrowsImg, self.switcharrowsImg, self.switcharrowsImg, parent=self) self.arrowsBtn.move(464, 453) self.arrowsBtn.pressed.connect(self.swapFG_BG_Colors) self.defblackwhiteBtn = ImageButton(self.defaultblackwhiteImg, self.defaultblackwhiteImg, self.defaultblackwhiteImg, parent=self) self.defblackwhiteBtn.move(436, 486) self.defblackwhiteBtn.pressed.connect(self.defaultFG_BG_Colors) if not krita: quitAction = QAction("E&xit", self, shortcut="Z", triggered=self.close) self.button.addAction(quitAction) self.button.setContextMenuPolicy(Qt.ActionsContextMenu) # Mask - Anything not black (0, 0, 0, 0-255) in this image will not be shown when drawn out. self.setMask(QBitmap(gImgDir + os.sep + "pixel_palette_mask512.png")) self.drawGUI() self.setFocusPolicy(Qt.StrongFocus) self.setFocus() self.setMouseTracking(True)