【实例简介】

【实例截图】

【核心代码】

'''

Created on 2018年8月8日

@author: Freedom

'''

from PyQt5.Qt import QWidget, QColor, QPixmap, QIcon, QSize, QCheckBox

from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QPushButton, QSplitter,\

QComboBox, QLabel, QSpinBox, QFileDialog

from PaintBoard import PaintBoard

class MainWidget(QWidget):

def __init__(self, Parent=None):

'''

Constructor

'''

super().__init__(Parent)

self.__InitData() #先初始化数据,再初始化界面

self.__InitView()

def __InitData(self):

'''

初始化成员变量

'''

self.__paintBoard = PaintBoard(self)

self.__colorList = QColor.colorNames() #获取颜色列表(字符串类型)

def __InitView(self):

'''

初始化界面

'''

self.setFixedSize(640,480)

self.setWindowTitle("PaintBoard Example PyQt5")

main_layout = QHBoxLayout(self) #新建一个水平布局作为本窗体的主布局

main_layout.setSpacing(10) #设置主布局内边距以及控件间距为10px

main_layout.addWidget(self.__paintBoard) #在主界面左侧放置画板

sub_layout = QVBoxLayout() #新建垂直子布局用于放置按键

sub_layout.setContentsMargins(10, 10, 10, 10) #设置此子布局和内部控件的间距为10px

self.__btn_Clear = QPushButton("清空画板")

self.__btn_Clear.setParent(self) #设置父对象为本界面

self.__btn_Clear.clicked.connect(self.__paintBoard.Clear) #将按键按下信号与画板清空函数相关联

sub_layout.addWidget(self.__btn_Clear)

self.__btn_Quit = QPushButton("退出")

self.__btn_Quit.setParent(self) #设置父对象为本界面

self.__btn_Quit.clicked.connect(self.Quit)

sub_layout.addWidget(self.__btn_Quit)

self.__btn_Save = QPushButton("保存作品")

self.__btn_Save.setParent(self)

self.__btn_Save.clicked.connect(self.on_btn_Save_Clicked)

sub_layout.addWidget(self.__btn_Save)

self.__cbtn_Eraser = QCheckBox(" 使用橡皮擦")

self.__cbtn_Eraser.setParent(self)

self.__cbtn_Eraser.clicked.connect(self.on_cbtn_Eraser_clicked)

sub_layout.addWidget(self.__cbtn_Eraser)

splitter = QSplitter(self) #占位符

sub_layout.addWidget(splitter)

self.__label_penThickness = QLabel(self)

self.__label_penThickness.setText("画笔粗细")

self.__label_penThickness.setFixedHeight(20)

sub_layout.addWidget(self.__label_penThickness)

self.__spinBox_penThickness = QSpinBox(self)

self.__spinBox_penThickness.setMaximum(20)

self.__spinBox_penThickness.setMinimum(2)

self.__spinBox_penThickness.setValue(10) #默认粗细为10

self.__spinBox_penThickness.setSingleStep(2) #最小变化值为1

self.__spinBox_penThickness.valueChanged.connect(self.on_PenThicknessChange)#关联spinBox值变化信号和函数on_PenThicknessChange

sub_layout.addWidget(self.__spinBox_penThickness)

self.__label_penColor = QLabel(self)

self.__label_penColor.setText("画笔颜色")

self.__label_penColor.setFixedHeight(20)

sub_layout.addWidget(self.__label_penColor)

self.__comboBox_penColor = QComboBox(self)

self.__fillColorList(self.__comboBox_penColor) #用各种颜色填充下拉列表

self.__comboBox_penColor.currentIndexChanged.connect(self.on_PenColorChange) #关联下拉列表的当前索引变更信号与函数on_PenColorChange

sub_layout.addWidget(self.__comboBox_penColor)

main_layout.addLayout(sub_layout) #将子布局加入主布局

def __fillColorList(self, comboBox):

index_black = 0

index = 0

for color in self.__colorList:

if color == "black":

index_black = index

index = 1

pix = QPixmap(70,20)

pix.fill(QColor(color))

comboBox.addItem(QIcon(pix),None)

comboBox.setIconSize(QSize(70,20))

comboBox.setSizeAdjustPolicy(QComboBox.AdjustToContents)

comboBox.setCurrentIndex(index_black)

def on_PenColorChange(self):

color_index = self.__comboBox_penColor.currentIndex()

color_str = self.__colorList[color_index]

self.__paintBoard.ChangePenColor(color_str)

def on_PenThicknessChange(self):

penThickness = self.__spinBox_penThickness.value()

self.__paintBoard.ChangePenThickness(penThickness)

def on_btn_Save_Clicked(self):

savePath = QFileDialog.getSaveFileName(self, 'Save Your Paint', '.\\', '*.png')

print(savePath)

if savePath[0] == "":

print("Save cancel")

return

image = self.__paintBoard.GetContentAsQImage()

image.save(savePath[0])

def on_cbtn_Eraser_clicked(self):

if self.__cbtn_Eraser.isChecked():

self.__paintBoard.EraserMode = True #进入橡皮擦模式

else:

self.__paintBoard.EraserMode = False #退出橡皮擦模式

def Quit(self):

self.close()

python 实现简单画板_python 画板示例源码(可做签名/涂鸦)相关推荐

  1. 《Python数据分析与挖掘实战》示例源码免费下载

    <Python数据分析与挖掘实战>​ 在当今大数据驱动的时代,要想从事机器学习.人工智能.数据挖掘等前沿技术,离不开数据跟踪与分析,通过NumPy.Pandas等进行数据科学计算,通过Se ...

  2. python自动化安装软件_python自动化安装源码软件包

    #!/usr/bin/env python # -*- coding:utf:8 -*- #create by .矿泉水 2015/7/30 import sys,commands if len(sy ...

  3. 用python画小猪佩奇代码_用python画个小猪佩奇(turtle示例源码)

    [实例简介]来副小猪佩奇,用python画个小猪佩奇 [实例截图] [核心代码]# coding:utf-8 import turtle as t def nose(x,y):#鼻子 t.pu() t ...

  4. python外星人入侵游戏代码_python外星人入侵 游戏源码

    [实例简介] [实例截图] [核心代码] #--coding:utf-8-- import pygame from pygame.sprite import Sprite class Alien(Sp ...

  5. python五子棋单机版源代码_python 五子棋 游戏源码(python 2.7入门级)

    [实例简介] [实例截图] [核心代码] from Tkinter import * from tkMessageBox import * class Game: def __init__(self) ...

  6. Java绘画板源码_Java 绘图板 示例源码下载(画板)

    Java 绘图板 示例源码下载(画板) java 2020-8-21 下载地址 https://www.codedown123.com/36795.html package minidrawpad; ...

  7. python画折线图代码-python绘制简单折线图代码示例

    1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt ...

  8. python画折线图详解-python绘制简单折线图代码示例

    1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt ...

  9. python画折线图-python绘制简单折线图代码示例

    1.画最简单的直线图 代码如下: import numpy as np import matplotlib.pyplot as plt x=[0,1] y=[0,1] plt.figure() plt ...

最新文章

  1. python模拟高并发_Python基于gevent实现高并发代码实例
  2. oracle分区交换速度,oracle交换分区对数据的加载提速案例
  3. desktop docker 无法卸载_docker,生信人的福音!
  4. RabbitMQ负载均衡(1)
  5. 得到前i-1个数中比A[i]小的最大值,使用set,然后二分查找
  6. 2018-2019-2 网络对抗技术 20165202 Exp9 Web安全基础
  7. android跨进程事件注入(程序模拟用户输入)
  8. 取某个字段的前几位 php,php如何实现截取前几个字符
  9. 搭建php服务器网站
  10. ubuntu 14.04 root破解
  11. unity下载官网地址
  12. 计算机基础知识实验课教案,高职《计算机网络基础》实验课程教学设计
  13. OLS最小二乘法和2SLS两阶段…
  14. 基于深度信念网络的事件识别
  15. Dell PowerEdge R640:NVMe直连、NDC网卡、PERC10一览
  16. 2015浙大计算机考研,2015浙大计算机考研机试题解.pdf
  17. GMS(Google Mobile Services)简介
  18. 树莓linux pi密码,树莓派 忘记密码的解决方法
  19. s.length什么意思
  20. 软件开发成本计价及相关问题

热门文章

  1. SAP中由生产版本有误导致的生产报工时提示“错误确定成本核算”问题实例
  2. 毛刺现象 java_硬件毛刺
  3. 最近学到一个新词“汽车含硅量”
  4. 群接龙拼团小程序开发
  5. 滴滴二面:Kafka是如何读写副本消息的?
  6. 如何通过分析网页源码下载淘宝教育视频
  7. DearMob iPhone Manager for Mac(iPhone手机数据加密传输软件)
  8. 使用KOG数据库进行注释
  9. 英语翻译作业(十二)
  10. Burpsuite简单代理配置