运行环境: ubantu18 + pycharm + pyqt5

运行效果:

大体思路:

左边界面为键入的直线信息,右边的界面显示画图效果。整个界面使用desiger 新建 Main Window 拖拽生成 UI界面。右边画图部分的实现使用paintEvent(QPaintEvent*)函数。由于paintEvent(QPaintEvent*)函数是QWidget类中的虚函数,用于ui的绘制,所以自定义一个类继承自 QWidget类 来实现画图框架。

信号与自定义槽

按键效果为:点击 color 键,设定画笔为左边选择的颜色。 点击 OK 键开始右边界面和直线的绘制。

为实现上面两个功能分别自定义两个函数 chosecolor() 和  drawline()。

再将函数与按键的 clicked(点击事件)绑定。

self.pushButton.clicked.connect(self.chosecolor)
self.pushButton_2.clicked.connect(self.drawline)def chosecolor(self):print(self.comboBox.currentText())if self.comboBox.currentText()=='blue':self.color=Qt.blueelif self.comboBox.currentText()=='red':self.color=Qt.redelif self.comboBox.currentText()=='green':self.color=Qt.greendef drawline(self):x0 = int(self.lineEdit.text())y0 = int(self.lineEdit_2.text())x1 = int(self.lineEdit_3.text())y1 = int(self.lineEdit_4.text())。。。。。

坐标转换

PyQt5中的坐标体系:左上角为原点(0, 0),向右为x轴正向,向下为y轴正向。

我们常用的坐标系:

因此需要进行坐标系的转换。

此外,由于 PyQt5 绘图中像素点间隔较小,为了便于能清晰的看出画线算法对像素点的选择,我这里采用 10 个像素点为 1 格。

size = self.size() # 获得窗口的尺寸。for i in points:x = 10 * i.x() + size.width() / 2.0   # size.width() :窗口宽度y = size.height() - (10 * i.y() + size.height() / 2.0)  #size.height():窗口高度painter.drawPoint(x, y)

显示子窗口

主窗口右边添加 gridLayout 布局,以放置自定义的画图框架。

self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)self.gridLayoutWidget.setGeometry(QtCore.QRect(400, 0, 720, 720))self.gridLayoutWidget.setObjectName("gridLayoutWidget")self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)self.gridLayout.setContentsMargins(0, 0, 0, 0)self.gridLayout.setObjectName("gridLayout")

实例化自定义绘图窗口为 demo ,再将其添加到 gridLayout 布局中,并显示。

        self.gridLayout.addWidget(self.demo)  # 添加子窗口self.demo.show()

直线显示覆盖

为了实现多次绘制直线的操作,在显示绘图窗口前,需要先检查 gridLayout 布局中是否已经存在上一次的绘图,如果有的话,需要进行移除。采用 removeWidget(self.demo) 进行不完全移除(即把存在的组件移除,但是其中的绘图内容还在。),实现多次绘图的显示。

if self.gridLayout.count():self.gridLayout.removeWidget(self.demo)

PS: 如需参考完整代码,请移步:https://download.csdn.net/download/qq_42185999/11834669   进行下载

pyqt5画直线(UI界面)----计算机图形学相关推荐

  1. 计算机图形学直线裁剪原理,计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪...

    计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪 计算机图形学-3.2用Liang-Barsky算法实现直线段裁剪 (1)算法设计原理 依次处理(p1,q1)(p2,q2)(p3,q3 ...

  2. 中点Bresenham画圆算法|MFC|计算机图形学

    中点Bresenham画圆算法|MFC|计算机图形学 Bresenham中点画圆算法 计算机图形学-基本图元的生成-圆 基于学习直线的生成算法后,又展开了圆.椭圆的讲解: 此次试验是简单的MFC应用, ...

  3. 图形学画直线c语言,计算机图形学:3种画直线算法(转)

    //--------------------------------------------------------------------- //绘制直线的DDA算法基本函数 //--------- ...

  4. 用计算机画中点和角平分线,计算机图形学作业(中点法画直线和八分画圆法)

    1.中点法画直线: void MidBresenhamLine(CDC *pDC,int x0,int y0,int x1,int y1,int color){ int dx,dy,d,up,down ...

  5. 计算机图形画圆弧的方法,计算机图形学_圆弧的生成

    <计算机图形学_圆弧的生成>由会员分享,可在线阅读,更多相关<计算机图形学_圆弧的生成(19页珍藏版)>请在人人文库网上搜索. 1.计算机图形学,ComputerGraphic ...

  6. java画bezier曲面_计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制

    <计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制>由会员分享,可在线阅读,更多相关<计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(9页珍 ...

  7. 【计算机图形学】小白谈计算机图形学(二)画圆篇之中点画圆法,Bresenham画圆算法,椭圆实操,线型处理详解

    小白谈计算机图形学(二)画圆篇之中点画圆法,Bresenham画圆算法,椭圆实操,线型处理详解 引言 如何画圆 基本思想 中点画圆法 中点画圆基本思路 中点画圆改进 Bresenham画圆算法 Bre ...

  8. 【计算机图形学】小白谈计算机图形学(四)二维三维图形变换—1

    小白谈计算机图形学(四)二维三维图形变换-1 窗口与视图 二维图形的几何变换 平移变换 比例变换 旋转变换 二维图形变换的矩阵表示 三种变换 齐次坐标变换 原二维线性变换 齐次坐标法 复合变换 例题: ...

  9. 【计算机图形学】小白谈计算机图形学(五)

    小白谈计算机图形学(五)三维图形投影 三维图形投影 分类 平面几何投影 1-平行投影 1.1-正投影 1.1.1-三视图 1.1.2-正轴测投影 例题 1.2-斜投影 相关链接 超链接 三维图形投影 ...

最新文章

  1. Linux系统火焰图
  2. Linux内核网络栈1.2.13-tcp.c概述
  3. 【数据结构】HashMap 面试题8问
  4. 如何解决SAP Structure CMST_SI_ENQ的DDIC_TYPE_INCONSISTENCY问题
  5. 什么情况下会导致@Async异步方法会失效?
  6. 三星全速进军物联网 所有产品都将内置互联功能
  7. php 首页加背景图片,如何在页首添加一张背景图片
  8. PowerShell通过Word批量打印文件
  9. 吃货在东京 -- 记那段吃不饱的日子 之二 丰州的雪花牛肉
  10. Required request body is missing 错误解决,400状态码
  11. 计算机桌面个性化怎样设置方法,桌面文件夹图标个性化【设置方法】
  12. Android - 屏幕适配
  13. 网络基础知识之IP与子网掩码和网络地址
  14. ResetTemplate封装
  15. 理解什么是接口测试?怎样做接口测试?
  16. 织梦主动提交_织梦实现发布文章主动推送(实时)给百度的方法
  17. 移动端 - adb shell常用命令
  18. 初探docker部署gitlab
  19. 使用树莓派定时给微信群发消息
  20. 大转折时代——生活与思维方式的大转折

热门文章

  1. PPT 插件 iSlide 六周年庆优惠,买两年送 360 天!每月不到 5 块钱
  2. JS 根据出生日期计算岁、月、天;根据岁、月、天计算出生日期。
  3. rust怎么在上门锁密码_rust密码锁队友怎么用 | 手游网游页游攻略大全
  4. HTML转TXT V1.0 简体中文绿色版
  5. shell 特殊符号
  6. 始终差半截,严监管给微粒贷带来反扑蚂蚁借呗契机?
  7. web开发之CSS知识点总结
  8. iOS开发 - 检测网络状态(WIFI、2G/3G/4G)
  9. 声音的变奏:深入理解ffmpeg音频格式转换的奥秘与应用
  10. 为什么属龙的有二婚命_00年属龙一生有二婚