PyQt5实现画布小程序
作者:xiaopengyaonixi 发布时间:2022-03-02 07:37:46
标签: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_()
来源:https://blog.csdn.net/W3Chhhhhh/article/details/105468389
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- API的应用通常会处理json数据,刚好今天看到了json字符串和python字符串的区别,放一段代码,区别一下子就看出来,的确json 库
- 利用python的sftp实现文件上传,可以是文件,也可以是文件夹。版本Python2.7.13 应该不用pip安装更多的插件,都是自带的不
- 1. 需要用到的Python库pygametkinter2. 简易UI设计audio_player = Tk()audio_player.t
- 1、运算概念的理解运算(Operation)是操作逻辑的抽象运算体现一种操作逻辑,在广义角度来说任何程序都是一种运算Python解释器通过保
- 这一段CSS代码相当简单,目的就是想用CSS来控制某段文字的显示与隐藏。起初我采用了下面的代码,令人不可思议的是,它们在我的IE6.0上居然
- 本文实例讲述了Python对列表排序的方法。分享给大家供大家参考。具体分析如下:1、sort()函数sort()函数使用固定的排序算法对列表
- asp中我们可以利用ERR对象来判断sql语句执行是否成功:SQL="Insert INTO TABLE(F1,F2) value
- 目录1. 折线图概述1.1什么是折线图?1.2折线图使用场景1.3绘制折线图步骤1.4案例展示2. 折线2D属性2.1linestyle:折
- 效果基于Python3。在自己写小工具的时候因为这个功能纠结了一会儿,这里写个小例子,供有需要的参考。小例子,就是点击按钮打开路径选择窗口,
- 使用python时,程序能运行,但是不能调试,找了半天解决方法,最后此操作分分钟奏效。两种方法:方法一:选中要运行的代码,右键Execute
- 假设在搜索框search中输入:“asp 编程” 先得到输入框中的内容:search=request("search")
- 代码之余,将代码过程重要的一些代码段备份一下,如下的代码内容是关于Python从ftp服务器下载文件的的代码,希望能对小伙伴有用途。#cod
- 前言接着上一篇的故事工厂模式继续,手机要出厂,显然光一个手机肯定是不行的,还需要包装盒、充电器等等东西。我们按照上一篇提到的工厂模式,去建立
- 阅读上一篇:FrontPage XP设计教程5——表单的设计 在制作出图文并茂的网页之后,很多读者朋友还想让自己的网页能够播放音乐、视频等多
- 一、前言今天学习视频时课后作业是找出1000以内既是素数又是回文数的数,写代码这个很容易,结果一运行遇到了bug,输出结果跟预期不一样,调试
- 面是我下载页面down.php 的php代码 现在我发现,用迅雷,谷歌浏览器直接打开,就能输出下载文件,一点不起防盗链作用。&nb
- 在多数的现代语音识别系统中,人们都会用到频域特征。梅尔频率倒谱系数(MFCC),首先计算信号的功率谱,然后用滤波器和离散余弦变换的变换来提取
- 今天搭了个“发短信”的页面,找朋友测试,没想到一位大侠直接弄了本长篇小说发我手机上……为了我的宝贝手机能继续健康澎湃,给文本区域(texta
- 今天在写爬虫程序的时候由于要翻页,做除法分页的时候出现了totalCount = '100' totalPage = int
- 利用pygame实现了简易版飞机大战。源代码如下:# -*- coding:utf-8 -*-import pygameimport sys