温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PyQt5实现画布小程序的代码详解

发布时间:2020-07-20 15:56:57 来源:亿速云 阅读:199 作者:小猪 栏目:开发技术

这篇文章主要讲解了PyQt5实现画布小程序的代码详解,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

本文实例为大家分享了PyQt5实现画布小程序的具体代码,供大家参考,具体内容如下

实现的效果图如下:

PyQt5实现画布小程序的代码详解

该实例中,涉及到的知识点有:

1.PyQt5 的常用的布局方式,这里使用到了QVBoxLayout,QHBoxLayout,如何灵活运用这些布局;

2.常用组件的使用方法,这里使用到了QPushButton, QLabel, QPixmap;

3.使用QPainter进行绘制;

4.事件与槽;

主要代码如下:

import random
import sys
 
from PyQt5.QtCore import QSize
from PyQt5.QtGui import QPixmap, QPainter, QColor
from PyQt5.QtWidgets import QMainWindow, QLabel, QApplication, QPushButton, QWidget, QVBoxLayout, QHBoxLayout
 
SPRAY_PARTICLES = 100
SPRAY_DIAMMETER = 10
 
COLORS = [
  '#000000', '#141923', '#414168', '#3a7fa7', '#35e3e3', '#8fd970', '#5ebb49',
  '#458352', '#dcd37b', '#fffee5', '#ffd035', '#cc9245', '#a15c3e', '#a42f3b',
  '#f45b7a', '#c24998', '#81588d', '#bcb0c2', '#ffffff',
]
 
 
class QPlatteButton(QPushButton):
  def __init__(self, color):
    super().__init__()
 
    self.setFixedSize(QSize(24, 24))
    self.color = color
    self.setStyleSheet("background-color: %s" % self.color)
 
 
class Canvas(QLabel):
  def __init__(self):
    super().__init__()
 
    canvas = QPixmap(1200, 800)
    canvas.fill(QColor('white'))
    self.setPixmap(canvas)
 
    self.last_x, self.last_y = None, None
    self.pen_color = QColor('#000')
 
  def set_pen_color(self, c):
    self.pen_color = QColor(c)
 
  def mouseReleaseEvent(self, *args, **kwargs):
    """
    松开鼠标事件
    """
    self.last_x, self.last_y = None, None
 
  def mouseMoveEvent(self, e):
    """
    移动鼠标事件
    """
    if self.last_x is None:
      self.last_x = e.x()
      self.last_y = e.y()
      return
 
    painter = QPainter(self.pixmap())
    pen = painter.pen()
    pen.setWidth(4)
    pen.setColor(self.pen_color)
    painter.setPen(pen)
    painter.drawLine(self.last_x, self.last_y, e.x(), e.y())
    painter.end()
    self.update()
 
    # update the origin for next time
    self.last_x = e.x()
    self.last_y = e.y()
 
  # def mouseMoveEvent(self, e):
  #   painter = QPainter(self.pixmap())
  #   p = painter.pen()
  #   p.setWidth(1)
  #   p.setColor(self.pen_color)
  #   painter.setPen(p)
  #
  #   for n in range(SPRAY_PARTICLES):
  #     xo = random.gauss(0, SPRAY_DIAMMETER)
  #     yo = random.gauss(0, SPRAY_DIAMMETER)
  #     painter.drawPoint(e.x() + xo, e.y() + yo)
  #
  #   self.update()
 
 
class MainWindow(QMainWindow):
  def __init__(self):
    super().__init__()
    self.setWindowTitle("画板小程序")
 
    self.canvas = Canvas()
 
    widget = QWidget()
    vlayout = QVBoxLayout()
    widget.setLayout(vlayout)
 
    vlayout.addWidget(self.canvas)
 
    palette = QHBoxLayout()
    vlayout.addLayout(palette)
    self.add_palette_buttons(palette)
    self.setCentralWidget(widget)
 
  def add_palette_buttons(self, layout):
    """
    在水平布局中放入一行调色板
    """
    for c in COLORS:
      b = QPlatteButton(c)
      b.pressed.connect(lambda c=c: self.canvas.set_pen_color(c))
      layout.addWidget(b)
 
 
if __name__ == '__main__':
  app = QApplication(sys.argv)
  window = MainWindow()
  window.move(120, 120)
  window.show()
  app.exec_()

看完上述内容,是不是对PyQt5实现画布小程序的代码详解有进一步的了解,如果还想学习更多内容,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI