python之pyQt5实例:几何绘图界面

使用PyQt5设计一个界面,其中点击不同的按钮可以在画布上画出点、直线、圆和样条曲线

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,QHBoxLayout,QVBoxLayout,QWidget,QLabel
from PyQt5.QtGui import QPainter, QPen, QColor
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("绘图应用")self.setGeometry(100, 100, 400, 400)self.button_point = QPushButton("画点", self)self.button_line = QPushButton("画直线", self)self.button_circle = QPushButton("画圆", self)self.button_curve = QPushButton("画曲线", self)self.button_point.clicked.connect(self.draw_point)self.button_line.clicked.connect(self.draw_line)self.button_circle.clicked.connect(self.draw_circle)self.button_curve.clicked.connect(self.draw_curve)# 将按钮添加到布局中hlayout = QHBoxLayout()hlayout.addWidget(self.button_point)hlayout.addWidget(self.button_line)hlayout.addWidget(self.button_circle)hlayout.addWidget(self.button_curve)# 创建画布控件(标签)并设置其占位符文本和样式表(使其不显示边框)self.canvas = QLabel()self.canvas.setText('Canvas')self.canvas.setStyleSheet("border: 0px solid white; background-color: white;")# self.canvas.setFixedSize(280, 180)  # 设置画布大小(示例值)# 将画布控件添加到布局的底部,并设置其占据主窗口的大部分位置vlayout = QVBoxLayout()vlayout.addLayout(hlayout)vlayout.addWidget(self.canvas)# 创建一个容器,将其布局设置为垂直布局,并将其添加到主窗口的顶部区域(不使用setCentralWidget)container = QWidget()container.setLayout(vlayout)self.setFixedHeight(220)  # 设置主窗口的高度,以适应容器的布局self.setCentralWidget(container)  # 将容器设置为中央窗口部件(中心区域)def draw_point(self):# 实现画点功能的方法passdef draw_line(self):# 实现画直线功能的方法passdef draw_circle(self):# 实现画圆功能的方法passdef draw_curve(self):# 实现画曲线功能的方法pass
def paintEvent(self, event):painter = QPainter(self)pen = QPen()pen.setWidth(2)painter.setPen(pen)if self.draw_point_flag:painter.drawPoint(self.last_pos)if self.draw_line_flag:painter.drawLine(self.start_pos, self.end_pos)if self.draw_circle_flag:radius = max(abs(self.start_pos.x() - self.end_pos.x()), abs(self.start_pos.y() - self.end_pos.y()))painter.drawEllipse(self.start_pos, radius, radius)if self.draw_curve_flag:# 实现画曲线的方法pass
def draw_point(self):self.draw_point_flag = Trueself.draw_line_flag = Falseself.draw_circle_flag = Falseself.draw_curve_flag = Falsedef draw_line(self):self.draw_point_flag = Falseself.draw_line_flag = Trueself.draw_circle_flag = Falseself.draw_curve_flag = Falsedef draw_circle(self):self.draw_point_flag = Falseself.draw_line_flag = Falseself.draw_circle_flag = Trueself.draw_curve_flag = Falsedef draw_curve(self):self.draw_point_flag = Falseself.draw_line_flag = Falseself.draw_circle_flag = Falseself.draw_curve_flag = True
if __name__ == '__main__':app = QApplication([])window = MainWindow()window.show()app.exec()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/182856.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyQt5中QLineEdit、QRadioButton、QComboBox这些小部件的change事件

最近在用PyQt5做项目,总结一下QLineEdit、QRadioButton、QComboBox这些部件用到的change事件绑定,即信号与插槽。 QLineEdit QLineEdit 对象是最常用的输入字段。 它提供了一个框,可以在其中输入一行文本。 要输入多行文本,需要…

链式前向星模板

建稠密图可以用邻接矩阵,但稀疏图再用邻接矩阵就很浪费空间了,有可能会爆空间复杂度。 可以用邻接表来实现邻接表建图,两种方法:1.链表 2.链式前向行 只讲第二种,比较常用简洁 链式前向星模板 #define IOS ios::syn…

基于单片机的胎压监测系统的设计

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、系统整体设计方案二、 系统设计4.1 主流程图 三 系统仿真5.1 系统仿真调试实物 四、 结论 概要 本文以STC89C52单片机为控制核心,通过气压传感器模块对汽车各轮胎的胎压进行实时数据的采集与处理&…

创建百科词条 烘托人物形象 提升形象力

百度百科作为中国最大的在线百科全书,小马识途营销顾问认为其具有巨大的商业价值。 首先,百度百科作为百度搜索引擎的一部分,吸引了数以亿计的用户访问,这为百度提供了大量的广告展示和点击收入的机会。 其次,百度百科…

20231106-前端学习加载和视频球特效

加载效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>加载效果</title><!-- 最新…

freertos多任务

以前我们都是一个任务&#xff0c;假设现在我们创建三个任务,项目工程在上一节网盘 #include "stm32f10x.h" // Device header #include "freertos.h" #include "task.h" #include "usart.h"TaskHandle_t myTaskHan…

Vue纯CSS实现掷色子

效果图&#xff1a; 实现代码 直接利用CSS3动画实现的效果&#xff0c;无js代码。 <template><div class"wrap"><input type"checkbox" id"roll"><label for"roll"><div class"content"><…

音视频报警可视对讲15.6寸管理机

音视频报警可视对讲15.6寸管理机 一、管理机技术指标&#xff1a; 1、15.6寸原装京东方工业液晶触摸屏&#xff0c;分辨率1920 (H) x 1080 (V)&#xff1b; 2、1000M/100M自适应双网口&#xff1b; 4、按键设置&#xff1a;报警/呼叫按键&#xff0c;通话/挂机按键&#xff…

Android Studio(列表视图ListView)

前言 前面在适配器章节&#xff0c;已经介绍了ListView的作用(干什么的)&#xff0c;这节将主要介绍如何去设计ListView页面视图。 思考 列表视图需要些什么&#xff1f; 1. 列表项容器&#xff08;装载各列表项的容器&#xff09;&#xff1a;<ListView/> 2. 列表项布局…

使用IDEA让文本对比不在变的困难

文章目录 前言操作1、IDEA与电脑磁盘任意文件的比较2、项目内部的文件比较3、剪切板比较4、IDEA本地历史比较5、IDEA版本历史对比 前言 在日常实际开发当中我们常常会对一些代码或内容进行比对查看是否有差异&#xff0c;这个时候不需要借用第三方比对插件&#xff0c;在IDEA中…

Android-JobService

JobService 这里写目录标题 JobService一、API详解1 onStartJob2 onStopJob 二、onStartJob | onStopJob 返回值case 1case 2case 3 ref: 深入理解JobScheduler与JobService的使用 - 掘金 (juejin.cn) (28条消息) JobService的使用介绍_TechMerger的博客-CSDN博客 (28条消息) J…

为什么有了MAC地址,还需要IP地址?

解释 搞懂这个问题&#xff0c;首先需要了解交换机的功能 交换机内部有一张MAC地址映射表&#xff0c;记录着MAC地址和端口的对应关系。 如果A要给B发送一个数据包&#xff0c;构造如下格式的数据结构&#xff1a; 到达交换机时&#xff0c;交换机内部通过自己维护的 MAC 地…

4 Tensorflow图像识别模型——数据预处理

上一篇&#xff1a;3 tensorflow构建模型详解-CSDN博客 本篇开始介绍识别猫狗图片的模型&#xff0c;内容较多&#xff0c;会分为多个章节介绍。模型构建还是和之前一样的流程&#xff1a; 数据集准备数据预处理创建模型设置损失函数和优化器训练模型 本篇先介绍数据集准备&am…

每日一题 318. 最大单词长度乘积(中等)

暴力求解没超时&#xff0c;那就这样吧 class Solution:def maxProduct(self, words: List[str]) -> int:ans 0for i in range(len(words)):for j in range(i 1, len(words)):if len(words[i]) * len(words[j]) < ans:continuet 0for k in range(26):ch chr(k ord(…

使用蒙特卡罗模拟的投资组合优化

在金融市场中&#xff0c;优化投资组合对于实现风险与回报之间的预期平衡至关重要。蒙特卡罗模拟提供了一个强大的工具来评估不同的资产配置策略及其在不确定市场条件下的潜在结果。 我们的目标是开发一个蒙特卡罗模拟模型的投资组合优化。参与者将被要求构建和分析由各种资产…

Camtasia2024破解版电脑屏幕录制剪辑软件

屏幕录制剪辑 TechSmith Camtasia for Mac v2021是 TechSmith 公司所开发出一款专业屏幕录像和编辑&#xff0c; Camtasia Studio2024版是由TechSmith公司官方进行汉化推出的最新版本,除2023版以下版本均没有官方汉化。 同时TechSmith公司打击第三方贩卖Camtasia Studio汉化的…

数据库的备份和恢复

备份&#xff1a;完全备份&#xff0c;增量备份 完全备份&#xff1a;将整个数据库完整的进行备份 增量备份&#xff1a;在完全备份基础的之上&#xff0c;对后续新增的内容进行备份 备份的需求 1生产环境中&#xff0c;数据的安全性至关重要&#xff0c;任何数据都可能产生非…

Disk Drill v5.3.1313(数据恢复备份)

Disk Drill是一款功能强大的数据恢复软件&#xff0c;它可以帮助用户恢复已删除、丢失、格式化或损坏的文件&#xff0c;并支持多种存储设备&#xff0c;包括计算机硬盘驱动器、外部硬盘、USB闪存驱动器、内存卡和其他存储介质。它和很多的文件系统都兼容&#xff0c;比如&…

NOIP2023模拟12联测33 B. 游戏

NOIP2023模拟12联测33 B. 游戏 文章目录 NOIP2023模拟12联测33 B. 游戏题目大意思路code 题目大意 期望题 思路 二分答案 m i d mid mid &#xff0c;我们只关注学生是否能够使得被抓的人数 ≤ m i d \le mid ≤mid 那我们就只关心 a > m i d a > mid a>mid 的房…

No Presto metadata available for docker-ce-stable

Linux CentOS中执行Docker一键安装脚本报错&#xff1a; No Presto metadata available for docker-ce-stable 执行以下命令可以解决&#xff0c;整个过程比较耗费时间&#xff0c;请耐心等待。 yum install docker-ce -y