首先声明,如果转载请声明作者以及来源
第三十六例子 一个简单的绘图工具
首先,先说明下,不知道为什么,反正各种线段的类型,感觉不明显,不知道是程序不对还是怎么了
求大神指点。。。
__author__ = '375159507@qq.com'
try:
from PySide import QtGui
from PySide import QtCore
except ImportError:
from PyQt4 import QtGui
from PyQt4 import QtCore
class PianArea(QtGui.QWidget):
def __init__(self):
super(PianArea,self).__init__()
self.setPalette(QtGui.QPalette(QtCore.Qt.white))
self.setAutoFillBackground(True)
self.setMinimumSize(400,400)
self.pix = QtGui.QPixmap(self.size())
self.pix.fill(QtCore.Qt.white)
self.mypen = QtGui.QPen()
self.mypen.setStyle(QtCore.Qt.SolidLine)
self.mypen.setColor( QtCore.Qt.red)
self.mypen.setWidth(5)
self.startPos = QtCore.QPoint(0,0)
def setPenStyle(self,newStyle):
self.mypen.setStyle(QtCore.Qt.DashDotDotLine)
self.update()
def setColor(self,newColor):
self.mypen.setColor(newColor)
def setWidth(self,newWidth):
self.mypen.setWidth(newWidth)
def clear(self):
self.pix = QtGui.QPixmap(self.size())
self.pix.fill(QtCore.Qt.white)
self.update()
def resizeEvent(self, e):
if self.height() > self.pix.height() or self.width() > self.pix.width():
newpaint = QtGui.QPixmap(self.size())
newpaint.fill(QtCore.Qt.white)
p = QtGui.QPainter(newpaint)
p.setPen(self.mypen)
p.drawPixmap(QtCore.QPoint(0,0),self.pix)
self.pix = newpaint
super().resizeEvent(e)
def mousePressEvent(self, e):
self.startPos = e.pos()
def mouseMoveEvent(self, e):
temppainter = QtGui.QPainter(self.pix)
temppainter.setPen(self.mypen)
temppainter.drawLine(self.startPos,e.pos())
self.startPos = e.pos()
self.update()
def paintEvent(self, e):
newpaint = QtGui.QPainter(self)
newpaint.setPen(self.mypen)
newpaint.drawPixmap(QtCore.QPoint(0,0),self.pix)
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.area = PianArea()
self.setCentralWidget(self.area)
self.createCrt()
def slotWidth(self,newwidth):
self.area.setWidth(newwidth)
def slotColor(self):
newcolor = QtGui.QColorDialog.getColor()
if newcolor:
self.pencolorshow.setPalette(newcolor)
self.area.setColor(newcolor)
def slotStyle(self,index):
if index == -1:
return
newstyle = self.penstyle.itemData(index)
self.area.setPenStyle(newstyle)
def createCrt(self):
self.penwidth = QtGui.QSpinBox()
self.penwidth.setRange(1,15)
self.penwidth.valueChanged.connect(self.slotWidth)
self.pencolorshow = QtGui.QFrame(self)
self.pencolorshow.setAutoFillBackground(True)
self.pencolorshow.setPalette(QtGui.QPalette(QtCore.Qt.red))
self.pencolorshow.setMinimumSize(20,25)
self.pencolor = QtGui.QPushButton("画笔颜色")
self.pencolor.clicked.connect(self.slotColor)
self.penstyle = QtGui.QComboBox(self)
self.penstyle.addItem("SolidLine",QtCore.Qt.SolidLine)
self.penstyle.addItem("DashDotDotLine",QtCore.Qt.DashDotDotLine)
self.penstyle.addItem("DashDotLine",QtCore.Qt.DashDotLine)
self.penstyle.addItem("DotLine",QtCore.Qt.DotLine)
self.penstyle.addItem("DashLine",QtCore.Qt.DashLine)
self.penstyle.currentIndexChanged.connect(self.slotStyle)
self.newtoolbar = QtGui.QToolBar("Tool")
self.newtoolbar.addWidget(self.penwidth)
self.newtoolbar.addWidget(self.pencolorshow)
self.newtoolbar.addSeparator()
self.newtoolbar.addWidget(self.pencolor)
self.newtoolbar.addWidget(self.penstyle)
self.addToolBar(self.newtoolbar)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(app.exec_())