linux不规则窗口,实例21 不规则窗体 - PyQt4 精彩实例分析_Linux编程_Linux公社-Linux系统门户网站...

news/2024/5/11 21:12:40/文章来源:https://blog.csdn.net/weixin_39690972/article/details/116911627

常见的窗体通常是各种方形的对话框,如前面实例中实现的所有对话框都是这样的。但有时也会需要用到非方形的窗体,如圆形,椭圆形甚至是不规则形状的对话框。

本实例即实现了一个对PNG图形外沿为形状的不规则形状对话框,如下图所示。

37e234a1ffdd9fae831788062561c4d6.gif

在图中所示的哆拉A梦即为一个不规则窗体,实例在不规则窗体中绘制了作为窗体形状的PNG图片,也可在不规则窗体上放置按钮等控件,可以通过鼠标左键拖动窗体,鼠标右键关闭窗体。

具体实现代码如下:

fromPyQt4.QtGuiimport*

fromPyQt4.QtCoreimport*

importsys

classShapeWidget(QWidget):

def__init__(self,parent=None):

super(ShapeWidget,self).__init__(parent)

pix=QPixmap("image/21.png","0",Qt.AvoidDither|Qt.ThresholdDither|Qt.ThresholdAlphaDither)

self.resize(pix.size())

self.setMask(pix.mask())

self.dragPosition=None

defmousePressEvent(self,event):

ifevent.button()==Qt.LeftButton:

self.dragPosition=event.globalPos()-self.frameGeometry().topLeft()

event.accept()

ifevent.button()==Qt.RightButton:

self.close()

defmouseMoveEvent(self,event):

ifevent.buttons() & Qt.LeftButton:

self.move(event.globalPos()-self.dragPosition)

event.accept()

defpaintEvent(self,event):

painter=QPainter(self)

painter.drawPixmap(0,0,QPixmap("image/21.png"))

app=QApplication(sys.argv)

form=ShapeWidget()

form.show()

app.exec_()

ShapeWidget即为此不规则窗体类,继承自QWidget类。在类中重定义的鼠标事件mousePressEvent(),mouseMoveEvent()以及绘制函数paintEvent(),使不规则窗体能用鼠标随意拖动。

第9行新建一个QPixmap对象。

第10行重设主窗体的尺寸为所读取的图片的大小。

第11行的setMask()命令是实现不规则窗体的关键,setMask()的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分使之看起来是透明的,它的参数可为一个QBitmap对象或一个QRegion对象,此处调用QPixmap的mask()函数获得图片自身的遮罩,为一个QBitmap对象。实例中使用的是png格式的图片,它的透明部分实际上即是一个遮罩。

重定义鼠标按下响应函数mousePressEvent(QMouseEvent)和鼠标移动响应函数mouseMoveEvent(QMouseEvent),使不规则窗体能响应鼠标事件,随意拖动。

在mousePressEvent函数中,首先判断按下的是否为鼠标左键,若是则保存当前鼠标点所在的位置相对于窗体左上角的偏移值dragPosition,如果按下鼠标右键,则关闭窗体。

此处的frameGeometry().topLeft()仍然表示整个窗体的左上角,而并不是所见的不规则窗体的左上角。

在mouseMoveEvent函数中,首先判断当前鼠标状态,调用event.buttons()返回鼠标的状态,若为左侧按钮则调用QWidget的move()函数把窗体移动至鼠标当前点,由于move()函数的参数指的是窗体的左上角的位置,因此要用鼠标当前点的位置减去相对窗体左上角的偏移值dragPosition。

ShapeWidget的重画函数主要完成在窗体上绘制图片的工作,此处为方便显示在窗体上绘制的即是用来确定窗体外形的PNG图片。0b1331709591d260c1c78e86d0c51c18.png

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

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

相关文章

域名实名认证多长时间_如何在阿里云申请域名丨建站系列

域名:由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网&…

网站统计中的数据收集原理及实现

http://blog.codinglabs.org/articles/how-web-analytics-data-collection-system-work.html 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目…

网站开发中经常用到的javaScript技术

1.1 屏蔽键盘所有键<script language"javascript"><!--function document.onkeydown(){ event.keyCode 0; event.returnvalue false;}--></script> 1.2 屏蔽鼠标右键 在body标签里加上οncοntextmenuself.event.returnvaluefalse 或者 <…

微软网站上已开始应用Silverlight技术

昨天我打开微软网站首页时&#xff0c;惊奇的发现&#xff0c;有动画效果的广告已经由Silverlight取代了原先的Flash来实现&#xff0c;因为被提示需要安装Sliverlight的运行时。 我想&#xff0c;随着Silverlight正式发布(1.0版本已经到RC了)&#xff0c;它的…

无法从该网站添加应用_Microsoft Edge Dev更新 可安装Chrome网上应用店里的主题

本周&#xff0c;谷歌向 Edge Dev 通道推送了 86.0.594.2 版本更新&#xff0c;添加了可从 Chrome 网上应用店获取主题的功能。此外 Edge Dev 迎来了可靠性修复和其它改进&#xff0c;并且为那些喜欢对浏览器进行各种调整的用户引入了一个新的标记(flags)。启用之后&#xff0c…

QQ分享网站显示自定义的缩略图标题和介绍

点我立即购买 <strong>效果图</strong> 在网页的head处添加 <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

Linux_13/ 虚拟网站主机功能,Vsftpd

虚拟网站主机Apache的虚拟主机功能是服务器基于用户请求的不同IP地址、主机域名或端口号&#xff0c;实现提供多个网站同时为外部提供访问服务的技术&#xff0c;如图10-12所示&#xff0c;用户请求的资源不同&#xff0c;最终获取到的网页内容也各不相同。 ------------------…

大型网站架构不得不考虑的10个问题

为什么80%的码农都做不了架构师&#xff1f;>>> 这里的大型网站架构只包括高互动性高交互性的数据型大型网站&#xff0c;基于大家众所周知的原因&#xff0c;我们就不谈新闻类和一些依靠HTML静态化就可以实现的架 构了&#xff0c;我们以高负载高数据交换高数据流动…

如何制作自己的网站

在当今的互联网时代&#xff0c;门户网站已经成为越来越多企业不可或缺的组成部分。企业如何自己制作网站&#xff1f;如果你们公司有懂网站建设这方面的人&#xff0c;可以让他给你们公司做个网站。一般做网站&#xff0c;域名空间买好了。下面就是网站程序的设计制作。如果要…

在线渐变配色网站分享

分享来源地址 纹理库.设计师的纹理宝库 webgradients渐变配色网站&#xff1a;https://webgradients.com Grabient在线渐变配色网站&#xff1a; https://www.grabient.com 下面这张图就是在线渐变配色的效果图 点击左下角「90度」图案&#xff0c;就可以操控渐变的角度哦&…

如何在Web网站实现搜索功能

以前曾在一些论坛上帖在搜索功能&#xff0c;不过还是有网友对Insus.NET说起不太会用。另外随着时间的推移&#xff0c;Insus.NET再把Search Utility再重构一下&#xff0c;希望用户能更方便容易应用。重构过的Utility&#xff0c;可以从下面这里下载&#xff1a;http://www.cn…

学历证书查询唯一网站

中国高等教育学生信息网&#xff1a;http://www.chsi.com.cn/ 转载于:https://www.cnblogs.com/scgw/archive/2008/01/04/1026082.html

尝鲜Jumony for MVC,体验插件化网站开发

Jumony for MVC是这一年来Jumony项目的重头戏&#xff0c;Jumony for MVC是Jumony技术与ASP.NET MVC的结合&#xff0c;尽管现在Jumony for MVC还未发布稳定版本&#xff0c;但确实是非常值得一试的一个视图引擎。希望这篇文章能给大家带来眼前一亮的感觉。 在“用网站&#xf…

实战:GOOGLE不收录网站的分析解决

2019独角兽企业重金招聘Python工程师标准>>> 经常看到这样的言论&#xff1a;为什么baidu不收录我的网站&#xff0c;怎么我的首页不被google收录。以前也没有在意过&#xff0c;因为自己也没有碰到过这样的现象。不过这次在弄一个新站(http://dasile.com)的时候&am…

推荐一个免费的程序猿学习网站(菜鸟教程)

https://www.runoob.com/ 菜鸟教程 送上一波福利 微信公众号开发、企业建站开发、小程序、vue、h5、css3、react等前端视频学习资料关注公众号【码兄】免费获取 在这里有在线编辑工具、有很多很多很多很多的语言、技术提供学习 前提是免费的免费的 欢迎加入技术分享学习公众…

web developer tips (36):使用IIS7.0 应用请求路由模块管理网站的beta版程序

原文地址&#xff1a;How to manage pilot or beta program for your site using Application Request Routing in IIS7.0 如果给你网站适合的用户设置目标和路由&#xff0c;用来使用试用/bate/新程序来查找用户资料&#xff0c;是不是件很酷的事&#xff1f;这对于管理曾经在…

推荐一个新的技术网站OutOfMemory.CN

2019独角兽企业重金招聘Python工程师标准>>> 朋友开发了一个技术网站&#xff0c;让我帮忙推荐给同样做技术的朋友们。 这个网站很有意思&#xff0c;他的域名是OutOfMemory.CN&#xff0c;似乎是和国外那个著名的stackoverflow学来的&#xff0c;都是异常。这个网站…

使用Web标准建站第9天:第一个CSS布局实例

接下来开始要真正设计布局了。和传统的方法一样&#xff0c;你首先要在脑海里有大致的轮廓构想&#xff0c;然后用photoshop把它画出来。你可能看到有关web标准的站点大都很朴素&#xff0c;因为web标准更关注结构和内容&#xff0c;实际上它与网页的美观没有根本冲突&#xff…

老弟,来了?VUE+Nuxt.js+Koa+Vuex入门教程(一)仿写一个cnode网站

if(有工作){if(工作地址 "深圳" || 工作地址 "广州" ){do(请联系作者&#xff0c;qq:1172081598)} }何为Nuxt.js Nuxt.js是一个vue的服务端渲染的框架&#xff0c;集成了express框架&#xff0c;sass/less框架等等,ui框架如Bootstrap&#xff0c;Vuet…

大流量 网站

引用&#xff1a;http://www.admin10000.com/document/948.html 动态应用&#xff0c;是相对于网站静态内容而言&#xff0c; 是指以c/c、php、Java、perl、.net等 服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通 常与数…