歡迎您光臨本站 註冊首頁

PyQt5實現畫布小程序

←手機掃碼閱讀     hongdian2012 @ 2020-06-08 , reply:0

本文實例為大家分享了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_()

 

                    


[hongdian2012 ] PyQt5實現畫布小程序已經有241次圍觀

http://coctec.com/docs/python/shhow-post-237502.html