现在的位置: 首页 > 综合 > 正文

改写linux窗口程序设计的Qt例子(5)

2014年01月11日 ⁄ 综合 ⁄ 共 3142字 ⁄ 字号 评论关闭

首先声明,如果转载请声明作者以及来源

第三十六例子 一个简单的绘图工具

首先,先说明下,不知道为什么,反正各种线段的类型,感觉不明显,不知道是程序不对还是怎么了
求大神指点。。。

__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_())



抱歉!评论已关闭.