首先声明,如果转载请声明作者以及来源
第三十六例子 一个简单的绘图工具
首先,先说明下,不知道为什么,反正各种线段的类型,感觉不明显,不知道是程序不对还是怎么了
求大神指点。。。
__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_())