#绘制各种图形      #弧形    #椭圆    #圆    #矩形    #多边形    #绘制图像
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import math

class DrawAll(QWidget):
    def __init__(self):
        super(DrawAll,self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('绘制各种图形')
        self.resize(500,800)
    def paintEvent(self, QPaintEvent):
        painter = QPainter(self)
        painter.begin(self)
        painter.setPen(Qt.blue)
        rect = QRect(0,10,100,100)
        painter.drawArc(rect,0,50*16) #画弧

        painter.setPen(Qt.red)
        painter.drawArc(120,10,100,100,0,360*16) #画圆
        painter.drawChord(0,120,100,100,0,50*16) #画弦 0-50度
        painter.drawPie(120,120,100,100,15*16,130*16) #画扇形,右起15度到130度
        painter.drawEllipse(10,240,150,100) #椭圆 10 240是左上角  ,150的宽度和100的高度
        point1 = QPoint(140,380)
        point2 = QPoint(270,420)
        point3 = QPoint(290,512)
        point4 = QPoint(290,588)
        point5 = QPoint(200,533)
        polygon = QPolygon([point1,point2,point3,point4,point5])
        painter.drawPolygon(polygon) #多边形

        image = QImage('./python.jpg')#装载图像 QImage
        rect = QRect(10,600,image.width()/3,image.height()/3)
        painter.drawImage(rect,image)

        #画个表盘
        painter.drawArc(300,100,100,100,0,360*16)
        pointX = 350
        pointY= 150
        r = 50
        for i in range(1,13):
            x1 = pointX - math.cos(i*30/180*math.pi)*50
            y1 = pointY - math.sin(i*30/180*math.pi)*50
            x2 = pointX - math.cos(i * 30 / 180 * math.pi)*9/10*50
            y2 = pointY - math.sin(i * 30 / 180 * math.pi)*9/10*50
            painter.drawLine(x1,y1,x2,y2)
        painter.end()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = DrawAll()
    main.show()
    sys.exit(app.exec_())

#绘制直线
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import math

class DrawLines(QWidget):
    def __init__(self):
        super(DrawLines,self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('画直线')
        self.resize(300,200)
    def paintEvent(self, QPaintEvent):
        painter = QPainter(self)
        painter.begin(self)
        pen = QPen(Qt.red,3,Qt.SolidLine)
        painter.setPen(pen)
        painter.drawLine(20,40,250,40)

        pen.setStyle(Qt.DashLine)
        painter.setPen(pen)
        painter.drawLine(20,50,250,50)

        pen.setStyle(Qt.DashDotDotLine)
        painter.setPen(pen)
        painter.drawLine(20, 60, 250, 60)

        pen.setStyle(Qt.DotLine)
        painter.setPen(pen)
        painter.drawLine(20, 70, 250, 70)

        pen.setStyle(Qt.CustomDashLine) #自定义线类型
        pen.setDashPattern([1,4,8,4]) #分别代表 长度1 ,间隔1,长度2,间隔2,循环
        painter.setPen(pen)
        painter.drawLine(20, 80, 250, 80)

        painter.end()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = DrawLines()
    main.show()
    sys.exit(app.exec_())

#用像素点绘制正弦曲线
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import math

class DrawPoints(QWidget):
    def __init__(self):
        super(DrawPoints,self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('窗口上用像素点绘制正弦曲线')
        self.resize(300,200)
    def paintEvent(self, QPaintEvent):
        painter = QPainter(self)
        painter.begin(self)
        size = self.size()
        num =10000
        for i in range(num):
            x = (size.width()-100)/2.0+100.0*i/num #变量是i 用i 来表示x 和 y ,这里给他限定一个周期的正弦曲线占用100宽和100高的空间
            y = size.height()/2.0-50*math.sin(math.pi*2.0*i/num)
            painter.drawPoint(x,y)
        painter.end()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = DrawPoints()
    main.show()
    sys.exit(app.exec_())

#QPainter 绘制文字

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class QPainterDemo(QWidget):
    def __init__(self):
        super(QPainterDemo,self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('QPainter Demo')
        self.resize(300,200)
        self.text = 'hello world'

    def paintEvent(self, event): #重写paintEvent方法 窗口改变,就会不断调用这个方法
        painter = QPainter() #创建QPainter对象
        painter.begin(self) #开始 加参数
        painter.setPen(QColor(150,43,5)) #设置画笔
        painter.setFont(QFont('Arial',20))#设置字体
        painter.drawText(event.rect(),Qt.AlignCenter,self.text)
        painter.end() #结束

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QPainterDemo()
    main.show()
    sys.exit(app.exec_())

#画刷QBrush
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class QBrushDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle('画刷演示QBrush')
        self.resize(500,800)

    def paintEvent(self, QPaintEvent):
        painter = QPainter()
        painter.begin(self)
        brush = QBrush(Qt.SolidPattern)
        painter.setBrush(brush)
        painter.drawRect(10,20,150,120) #分别代表左上角横坐标,左上角纵坐标,宽度,高度

        brush = QBrush(Qt.HorPattern)
        painter.setBrush(brush)
        painter.drawRect(180, 20, 150, 120)

        brush = QBrush(Qt.Dense1Pattern)
        painter.setBrush(brush)
        painter.drawRect(10, 180, 150, 120)

        brush = QBrush(Qt.Dense2Pattern)
        painter.setBrush(brush)
        painter.drawRect(180, 180, 150, 120)
        painter.end()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QBrushDemo()
    main.show()
    sys.exit(app.exec_())

#拖拽控件的实现
    #A 控件拖拽到B控件
    #A控件设置可拖拽A.setDrapEnabled(True),B控件设置接收拖拽 B.setAcceptDrops(True)
    #B要响应2个事件:1、dragEnterEvent 将A拖到B触发 2、dropEvent 在B的区域放下A的时候触发

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyComboBox(QComboBox): #自定义控件
    def __init__(self):
        super().__init__()
        self.setAcceptDrops(True)
    def dragEnterEvent(self, QDragEnterEvent): #这里后面的参数好像可以随便命名
        if QDragEnterEvent.mimeData().hasText(): #判断拿到的文本如果有内容就接收,否则拒绝
            QDragEnterEvent.accept() #接受
        else:QDragEnterEvent.ignore() #拒绝
    def dropEvent(self, QDropEvent):
        self.addItem(QDropEvent.mimeData().text()) #释放事件,处理数据

class DragWidgetDemo(QWidget): #主窗口类
    def __init__(self):
        super().__init__()
        self.setWindowTitle('控件拖拽演示')
        self.resize(200,100)
        self.label = QLabel('请将文本框内容拖拽到下拉框')
        self.lineEdit = QLineEdit()
        self.lineEdit.setDragEnabled(True)
        self.combobox = MyComboBox()

        layout = QVBoxLayout(self)
        layout.addWidget(self.label)
        layout.addWidget(self.lineEdit)
        layout.addWidget(self.combobox)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = DragWidgetDemo()
    main.show()
    sys.exit(app.exec_())

#使用剪贴板
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class ClipBoardDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('剪贴板演示')
        textCopyButton = QPushButton('复制文本')
        textCopyButton.clicked.connect(self.textCopy)
        textPasteButton = QPushButton('粘贴文本')
        textPasteButton.clicked.connect(self.textPaste)

        htmlCopyButton = QPushButton('复制html')
        htmlCopyButton.clicked.connect(self.htmlCopy)
        htmlPasteButton = QPushButton('粘贴html')
        htmlPasteButton.clicked.connect(self.htmlPaste)

        imageCopyButton = QPushButton('复制图片')
        imageCopyButton.clicked.connect(self.imageCopy)
        imagePasteButton = QPushButton('粘贴图片')
        imagePasteButton.clicked.connect(self.imagePaste)

        self.label = QLabel('label1')
        self.imageLabel = QLabel()
        # self.imageLabel.setPixmap(QPixmap('./favicon.ico'))
        self.label1 = QLabel('hello')
        self.textEdit = QTextEdit()

        layout = QGridLayout(self)
        layout.addWidget(textCopyButton,0,0)
        layout.addWidget(imageCopyButton,0,1)
        layout.addWidget(htmlCopyButton,0,2)
        layout.addWidget(textPasteButton,1,0)
        layout.addWidget(imagePasteButton,1,1)
        layout.addWidget(htmlPasteButton,1,2)
        layout.addWidget(self.label)
        layout.addWidget(self.imageLabel)
        layout.addWidget(self.label1)
        layout.addWidget(self.textEdit)

    def textCopy(self):
        clipboard = QApplication.clipboard()#从QApplication中直接获取剪贴板
        clipboard.setText('hello world')
    def textPaste(self):
        clipboard = QApplication.clipboard()
        self.label1.setText(clipboard.text())

    def imageCopy(self):
        clipboard = QApplication.clipboard()  # 从QApplication中直接获取剪贴板
        clipboard.setPixmap(QPixmap('favicon.ico'))
    def imagePaste(self):
        clipboard = QApplication.clipboard()
        self.imageLabel.setPixmap(clipboard.pixmap())
    def htmlCopy(self):
        mimedate = QMimeData() #QMimeData 存放数据
        mimedate.setHtml('<a href="#">hello world</a>')
        clipboard = QApplication.clipboard()
        clipboard.setMimeData(mimedate)
    def htmlPaste(self):
        clipboard = QApplication.clipboard()
        mimedata = clipboard.mimeData()
        if mimedata.hasHtml():
            self.textEdit.setText(mimedata.html())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = ClipBoardDemo()
    main.show()
    sys.exit(app.exec_())

posted on 2020-08-28 18:26  94小渣渣  阅读(1169)  评论(0编辑  收藏  举报