用python画三维图、某区域的高程,python - 在PyQt中绘制具有高程和降低效果的3D矩形/多边形 - SO中文参考 - www.soinside.com...

据我所知,没有内置的PyQt 3D绘制小部件/功能,因为您只能绘制2D多边形。但我们可以创建一个自定义类来模拟3D绘画。从您的Java链接reference:

Java支持3D矩形,但第三维的效果不是很明显。由于海拔较低,效果可以忽略不计。 Java设计师通过沿矩形边框绘制更亮和更暗的线条来实现3D效果。

我们可以模拟Java的3D绘图功能的效果:

void fill3DRect(int x, int y, int width, int height, boolean raised)

此方法使用上面指定的参数绘制实心3D矩形。最后一个布尔参数true表示高于绘图表面的高程,false表示蚀刻到表面。

为了在Python中获得3D效果,我们基本上可以通过使用两种颜色的颜色然后变暗并照亮某些边来做同样的事情。

eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS8yUElzci5wbmcifQ==

from PyQt5 import QtCore, QtGui, QtWidgets

import sys

class Rectangle3D(QtWidgets.QWidget):

def __init__(self, parent=None):

QtWidgets.QWidget.__init__(self, parent)

# Elevated 3D rectangle color settings

self.elevated_border_color = QtGui.QColor(111,211,111)

self.elevated_fill_color = QtGui.QColor(0,255,0)

self.elevated_pen_width = 2.5

# Lowered 3D rectangle color settings

self.lowered_border_color = QtGui.QColor(0,235,0)

self.lowered_fill_color = QtGui.QColor(0,178,0)

self.lowered_pen_width = 2.5

def draw3DRectangle(self, x, y, w, h, raised=True):

# Specify the border/fill colors depending on raised or lowered

if raised:

# Line color (border)

self.pen = QtGui.QPen(self.elevated_border_color, self.elevated_pen_width)

# Fill color

self.fill = QtGui.QBrush(self.elevated_fill_color)

else:

# Line color (border)

self.pen = QtGui.QPen(self.lowered_border_color, self.lowered_pen_width)

# Fill color

self.fill = QtGui.QBrush(self.lowered_fill_color)

painter = QtGui.QPainter(self)

# Draw border color of rectangle

painter.setPen(self.pen)

painter.setBrush(self.fill)

painter.drawRect(x, y, w, h)

# Cover up the top and left sides with filled color using lines

if raised:

painter.setPen(QtGui.QPen(self.elevated_fill_color, self.elevated_pen_width))

else:

painter.setPen(QtGui.QPen(self.lowered_fill_color, self.lowered_pen_width))

painter.drawLine(x, y, x + w, y)

painter.drawLine(x, y, x, y + h)

def paintEvent(self, event):

self.draw3DRectangle(50,50,300,150,True)

self.draw3DRectangle(50,250,300,150,False)

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

widget = Rectangle3D()

widget.show()

sys.exit(app.exec_())

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

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

相关文章

优酷APP下载视频不清晰怎么解决

视频软件我相信每个人手机上至少有一款吧,甚至更多,当我们做车没网的时候就看下载好的视频,但下载的不清晰,效果不好。那可能是没有去设置过下载时的清晰度,今天小编来和大家分享一下如何操作。 01、 首先&#xff0c…

oracle 视图带条件,Oracle视图可以进行DML操作的条件

条件一:在连接视图中不能有Order by、Group by、connetc by等语句排序语句。条件二:基础表中所有的NOT NULL列都必须在这个视图中。条件三:需要更新的列不是虚拟列。条件四:不能够具有分组函数。除了以上几个限制条件之外&#xf…

怎样下载优酷视频到电脑上播放

下载优酷视频上的视頻到电脑,有很多的方式,在其中有一种非常简单的,今日共享给大量的人了解。 01、 最先要进到优酷网   02、 在申请注册一个账户   03、 登录你申请注册的账户   04、 找到你喜爱的视頻,把电脑鼠标放到箭头…

oracle定时加载文件,采用sqlldr定时将文本文件加载进入数据库

需求:每个小时前台生成一个追踪文件,文件名格式为yyyymmddhh,存放在linux服务器上,要求每小时将上一个小时生成的文件导入数据库解决方案:采用sqlldr可以快速的将外部文本文件加载到数据库中,根据要求创建控制文件和sh…

腾讯视频客户端如何设置快进速度

今天小编给大家分享“腾讯视频客户端如何设置快进速度”。大家都知道腾讯视频作为中国最大的视频分享网站,它有非常全面的视频资源。而我们只要通过下载这个客户端,就可以完全的将这些视频尽收眼底,不再需要在页面上繁琐的操作。腾讯视频播放…

腾讯视频如何删除观看记录

今天小编给腾讯视频用户们分享“腾讯视频如何删除观看记录”,希望可以帮助大家。我们可以在腾讯视频播放器上,观看各种电视剧、电影、综艺节目等内容。里面的大部分视频都是免费的,部分独播大剧可能会存在vip收费的情况,这也是无法…

oracle的form开发,Oracle Form开发之调用Form

Form开发中经常会用到Form间相互调用的功能,总结了以下,大概有以下3种方法:方法1PROCEDURE shot_plan_new ISfm_id FormModule;BEGINfm_id : Find_Form(TVSNPMPSCRNMT);if id_null(fm_id) thenapp_form.open(TVSN,TVSNPMPSCRNMT);--Applicati…

7招改善你的谷歌chrome浏览器

核心提示:Google Chrome是由Google开发的一款设计简单、高效的Web浏览工具。 Google浏览器已经发布了几个星期,也许大多数人都已经听说过它,并已经下载使用过了。如果你喜欢用这款浏览器并且想进一步深入,这里有七个有用的特性可…

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析(续3)

马上就要进入2024年了,要参加2024年PMP一季度考试的小伙伴可以准备起来了。2024年的PMP考试将继续采用新考试大纲,考试内容包括PMBOK第六版、PMBOK第七版和敏捷实践指南,而且敏捷(或者叫混合)的项目环境将占比超过50%&…

oracle触发器更新语法,Oracle之前更新触发器

本Oracle教程解释了如何在Oracle中创建Before Update触发器的语法和示例。Before Update触发器表示Oracle将在执行更新操作之前触发此触发器。语法在Oracle / PLSQL中创建Before Update触发器的语法是:CREATE [ OR REPLACE ] TRIGGER trigger_nameBEFORE UPDATEON t…

实用:Google Chrome(谷歌浏览器)键盘快捷键大全

核心提示:关于Google Chrome键盘快捷键已整理出来,详细请看全文。 以下是整理的Google Chrome,键盘快捷键大全,Chrome为网页浏览设置了许多快捷键,许多复杂的鼠标操作可以用键盘轻松完成。 合理地使用快捷键可以让你的操作事半功…

前台等待事件 oracle,Oracle等待事件之buffer busy waits

产生原因官方定义:This wait happens when a session wants to access a database block in the buffer cache but it cannot as the buffer is "busy". The two main cases where this can occur are:Another session is reading the block into the buf…

win8消费者预览版Chrome无法设置默认浏览器

核心提示:在Windows 8消费者预览版中Chrome无法设置默认浏览器该怎么办?在这里就来告诉你解决的方法! 虽然说IE10很优秀,但萝卜青菜各有所爱,例如Win8迷就喜欢谷歌的Chrome浏览器,各种同步!在Windows 8消费者预览版中…

oracle有人用过fra吗,FRA(闪回恢复区)

1、闪回恢复区简介闪回恢复区可以集中存储所有与恢复相关的文件。FRA可以使用本地附加的存储、Oracle的群集文件系统(Cluster FileSystem,简写为OCFS)或Oracle 10g中新的自动存储管理(ASM)特性。2、闪回恢复区可包含的文件类型(1) 归档的重做日志(2) 控制文件(3) 控制文件自动备…

谷歌Chrome浏览器发布10年成霸主

谷歌chrome浏览器发布10年成霸主 9月3日消息,据The Verge报道,谷歌于2008年9月2日首次发布了Chrome浏览器。作为“浏览器的全新体验”,Chrome首次推出了谷歌网络漫画,标志着该公司第一款网络浏览器问世。 谷歌Chrome浏览器发布1…

oracle服务端安装和下载,oracle 11g 服务端下载地址及安装说明

Oracle 11g 服务端的安装步骤 简介 本文主要介绍 Oracle 11g 服务端的安装步骤,在介绍之前说明以下几点: 1. 所安装的服务器是本机的虚拟机,操作系统为 Windows Server 2019: 2. 以下 ...Oracle 11g服务端的安装和配置1.双击Oracle11g_database安装目录下的Setup.exe. 2.选…

xx Chrome浏览器市场份额下滑

xx chrome浏览器市场份额下滑 谷歌浏览器继续成为世界上排名第一的桌面浏览器,尽管上个月份额小幅下降,而新版Windows 10默认的微软edge浏览器则努力提高市场份额。就市场份额而言,谷歌浏览器是61.69%,而微软或多或少已经停止使用…

linux系统使用小端内存,linux进程内存管理

1.数据的内部存储大端:起始地址存放数据的高位小端:起始地址存放数据的低位大端小端是由处理器的体系结构决定的,不是操作系统。测试方法:点击(此处)折叠或打开#include int main(){int a0x12345678;char *pNULL;p&a;if(*p 0…

internet explorer浏览器市场份额仍超Chrome和Firefox

internet explorer浏览器市场份额仍超Chrome和Firefox 很多人并不知道 Microsoft Edge 是个什么浏览器,原因很简单,目前该浏览器仅支持 Windows 10 操作系统,而且 Edge 也是随 Windows 10 的发布才首次出现在人们的视野当中。微软对其寄予厚…

linux如何挂载nfs目录,linux – NFS导出已经挂载NFS的目录(在服务器上)

我有一个NFS服务器,A,共享一个文件夹. B正在安装文件夹. B也在分享该文件夹.但是C无法安装它. C上的错误是:mount.nfs: 192.168.0.1:/export/myfolder Failed,reason given by server: Permission denied在B上,/ var / log / messages中的错误是Aug 17 15:21:21 B m…