pyqt 界面关闭信号_木辛老师的编程课堂之Python和Qt实战慕课软件开发:增加关闭按钮...

2b4c773358be8ab964e858ac1b8ab290.png
软件实战开始,快速提供编程能力;通过实战,分析产品需求,梳理设计需求,提升项目分析和架构的能力。快点跟着木辛老师一起学习吧!
请点击右上角“关注”按钮关注我们哟:跟着木辛老师学习Python编程知识,变身快乐的编程达人吧~

上节课的时候,留了一个小尾巴,不知道大家这几天有没有思考过这个问题呢?

“将主窗口的标题栏隐藏之后,发现无法关闭窗口。这应该怎么解决?”

那么,在这一节课里,我们就讲一下通过编码的方式,调用系统方法,将窗口顺利的关闭。

目前的登录页面还没有制作完毕,还需要继续使用登录页面的设计稿。

5e3cb7e0a9b015f903323479ee0a21eb.png

登录界面设计稿

如果大家需要复习一下信号和槽的知识,可以参考一下木辛老师之前的一篇教程,传送门:《木辛老师的编程课堂:Python和Qt之页面布局实战篇(2)》。

增加关闭按钮

我们需要先按照设计稿的要求,在主窗口中添加一个关闭按钮:“x”。

将关闭按钮的素材图片拷贝到当前项目的images目录下,姑且名字就叫做:

close_windows.png 

打开Qt Designer开发工具,在弹出的对话框中点击“打开”按钮,选择构建登录页面的.ui文件,在这里是“LoginMainWin.ui”;

双击打开,或者单击选中这个文件之后,点击右下角的“打开”按钮。

498b5e4f0286b26eb0b859539442bd74.png

打开登录界面文件

成功打开之后,大家就可以看到之前尚未完成的登录页面。

拖拽左侧Buttons区的QPushButton到主窗口,并按照设计稿将这个按钮放置在560px x 10px的位置。

04ce8a88e598ab646d207fde667fa7d4.png

通过右侧的属性编辑窗口,修改geometry属性,将这个控件的X、Y、宽度和高度分别修改为:560、10、25、20。

起个名字

在之前的课程里,并没有提到这个关闭按钮,所以,这个关闭按钮目前还没名没姓,属于一个黑户!

那咱们给他起一个名字吧,按照之前的规定,这个关闭按钮就叫它:

btn_close_window

同时,一定要修改这个控件的objectName属性哟,否则无法通过btn_close_window这个名字找到这个控件。

具体方法就是:选中这个控件,在属性编辑窗口中修改QObject中的objectName字段,将这个字段的值修改为btn_close_window就可以了。

好了,目前位置我们已经将关闭按钮添加好了,保存程序;进入PyCharm软件,右键点击LoginMainWin.ui文件,在弹出来的菜单中选择“External Tools”中的“PyUIC”插件,将.ui文件转换为.py文件。

1c7f66a7d1a49527e535946617709eb9.png

转换.ui文件为.py文件

此时,打开LoginMainWin.py文件,咱们一起看看代码有没有更新吧。

f13e36daf1912ee85d335b04a5bf442c.png

查看python文件的变化

可以看到,代码中出现了刚才添加的QPushButton控件,并通过对象的setGeometry方法,将对应的属性成功传递。

按钮加载图片

接下来,需要将关闭按钮的图像放置上去了。

pixmap = QtGui.QPixmap(QtGui.QImage('images/close_windows.png'))
self.btn_close_window.setIcon(QtGui.QIcon(pixmap))
self.btn_close_window.setIconSize(QSize(10, 10))

我们通过实例化了一个QPixmap对象,加载了关闭按钮的图片文件,通过使用QPushButton的setIcon方法,将这个pixmap设置为QPushButton上的一个小图标,同时还将图标尺寸设置为10x10px,这样看起来更美观一些。

fdcea3489a4423e2b5bb76c8c389491e.png

增加关闭按钮之后的效果

看着挺不错的,(#^.^#)。

好了,已经添加完关闭按钮了,咱们这个页面又做完一个新功能,收工吧。

咦······,怎么还是没法关闭这个窗口呀!

这是怎么回事啊,已经将关闭按钮添加上去了,为什么还不能关闭呢?

是这样的,我们仅仅是将按钮放置到了主窗口上,并没有给它添加事件;也就是说,在我们点击了按钮之后,它并不知道要做什么,所以,只能呆呆的没有反应。

教程开始的时候,提到过需要先复习一下“信号和槽”的相关知识,在这里就需要用到了。

添加事件

我们需要给关闭按钮添加事件,让按钮作为一个事件发起者,发送出一个关闭信号。

这个事件在什么情况下发生呢?

当我们点击关闭按钮的时候,需要通知系统:我们想要关闭当前主窗口,请快快把主窗口关闭吧!

具体代码可以这么写:

self.btn_close_window.clicked.connect(self.close)

调用QPushButton的clicked方法,并通过其connect,将这个信号发送给系统的close方法,完成关闭主窗口的操作。

逻辑就是这么简单的!

咱们重新梳理下流程哈

  1. 在这里的定义关闭按钮是信号发出者
  2. 当点击关闭按钮之后,会发射一个信号
  3. 通过connect方法,将这个按钮的电机事件连接到了主窗口的关闭事件上
  4. 接收者窗体在接收到关闭信号之后,将运行槽函数close(),将主窗口关闭。

这么一讲,大家是不是就能理解信号和槽机制的运行机理了呢?

好了,咱们的关闭按钮完工咯!

不对!发现一个问题,这个关闭按钮四周有一个边框呢,这个在设计稿里可以没有的。咱们需要想想办法把这个边框去掉吧。

这样吧,今天咱们就把这个问题留作一个思考问题,请大家想想:如何去掉按钮的边框吧。

下一节课中,我们会引入一个新的概念,实现去掉按钮的边框。

请持续关注木辛老师的编程课哟,后续更多精彩陆续到来!

快乐编程,快乐成长!

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

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

相关文章

从零开始nodejs系列文章

http://blog.fens.me/series-nodejs/转载于:https://www.cnblogs.com/chinafbi/p/5394482.html

Leetcode589.N-ary Tree Preorder TraversalN叉树的前序遍历

给定一个 N 叉树&#xff0c;返回其节点值的前序遍历。 class Node { public:int val;vector<Node*> children;Node() {}Node(int _val, vector<Node*> _children) {val _val;children _children;} };//递归 class Solution { public:vector<int> res;vect…

打破双亲委派么,怎么打破_质量保证被打破。 这就是我们如何使其像其他所有东西一样敏捷。...

打破双亲委派么,怎么打破by Derwin由Derwin 质量保证被打破。 这就是我们如何使其像其他所有东西一样敏捷。 (Quality Assurance is broken. Here’s how we can make it as agile as everything else.) Process is the key to great software.过程是出色软件的关键。 In gen…

android java.lang.linkageerror_使用eclipse中的maven构建web应用出现 java.lang.LinkageError异常...

▒▒▒▒: Servlet.service() for servlet [jsp] in context with path [/webdemo] threw exception [java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different typ…

android 键盘遮盖输入框_Android软键盘挡住输入框的终极解决方案

前言开发做得久了&#xff0c;总免不了会遇到各种坑。而在Android开发的路上&#xff0c;『软键盘挡住了输入框』这个坑&#xff0c;可谓是一个旷日持久的巨坑——来来来&#xff0c;我们慢慢看。入门篇最基本的情况&#xff0c;如图所示&#xff1a;在页面底部有一个EditText&…

最全面的几何画板实用教程视频免费下载

不同的选择就会有不同的人生夜&#xff0c;这里小编为奋斗在教学一线的老师们送个大福利&#xff0c;这也是老师们充实自己的好去处。作为数学老师一枚&#xff0c;在平时的教学中应该用到很多教学辅助软件&#xff0c;而几何画板就是其中一款。众所周知&#xff0c;几何画板是…

Redis(1):简介

2019独角兽企业重金招聘Python工程师标准>>> Redis之父Salvatore Sanfilippo于2009年将Redis开源。VMware公司从2010年开始赞助Redis的开发&#xff0c;Salvatore Sanfilippo和Pieter Noordhuis(另一名主要的代码贡献者)同年加入VMware&#xff0c;全职开发Redis。R…

小程序服务器域名5次_为什么您不应该在100美元的服务器上用5天的时间构建面向500,000个用户的应用程序...

小程序服务器域名5次by Howard Lo霍华德罗 为什么您不应该在100美元的服务器上用5天的时间构建面向500,000个用户的应用程序 (Why you shouldn’t build an app aimed at 500,000 users in 5 days on a $100 server) A few days ago, I read Erik Duindam’s “How I built an…

tp5 异步处理_tp5框架ajax异步添加数据的代码实现

本篇文章给大家带来的内容是关于tp5框架ajax异步添加数据的代码实现&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。ajax异步无刷新处理数据的用户体验还是不错的&#xff0c;在我们的项目开发中算是经常使用到的一个知识点。…

java中类型转换的造型_Java总结篇系列:类型转换/造型

Java中&#xff0c;经常可以遇到类型转换的场景&#xff0c;从变量的定义到复制、数值变量的计算到方法的参数传递、基类与派生类间的造型等&#xff0c;随处可见类型转换的身影。Java中的类型转换在Java编码中具有重要的作用。首先&#xff0c;来了解下数据类型的基本理解&…

Google Maps API V3 之 路线服务

Google官方教程&#xff1a; Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 之控件 Google 地图 API V3 之 叠加层 Google Maps API V3 之绘图库 信息窗口 Google Maps API V3 之 图层 Google Maps API …

day 04 作业 循环和分之

# 读程序&#xff0c;总结程序的功能:"""1.求2 的20次方numbers1for i in range(0,20):numbers*2print(numbers)2.求100以内能整除3 或 7的数&#xff0c;并21不能整除的数summation 0num 1while num<100: if (num%30 or num%70) and num%21!0: …

Mysql数据库多实例配置

二进制安装&#xff1a; [rootlufengcentos ~]# mkdir /home/lufeng/tools -p [rootlufengcentos ~]# cd /home/lufeng/tools [rootlufengcentos tools]# rz [rootlufengcentos tools]# tar xf mysql-5.5.49-linux2.6-x86_64.tar.gz [rootlufengcentos tools]# mkdir -p /ap…

了解ES6 The Dope Way第三部分:模板文字,扩展运算符和生成器!

by Mariya Diminsky通过玛丽亚迪明斯基(Mariya Diminsky) 了解ES6 The Dope Way第三部分&#xff1a;模板文字&#xff0c;扩展运算符和生成器&#xff01; (Learn ES6 The Dope Way Part III: Template Literals, Spread Operators, and Generators!) Welcome to Part III of…

Jenkins --SVN

项目名称&#xff1a;XXX 源码管理&#xff1a; None 发布之前&#xff0c;获取源码 编译获取后的代码&#xff0c;指定vs版本 将源码拷贝至jenkins工作控件 d:\jenkins\workspace\.. 删除指定文件 用管理员命令 将Jenkins工作空间的代码发布至指定路径转载于:https://www.cnbl…

keil5图标变成白色_电脑桌面图标全部变成白色的解决办法

系统桌面图标全部变成一个样子的白色图标&#xff0c;这是怎么回事&#xff1f;电脑桌面的图标全部变成白色该如何解决&#xff1f;下面为大家解答。解决办法&#xff1a;1.首先尝试最简单的方法操作看看&#xff0c;登录到系统桌面&#xff0c;右键桌面空白处点击打开“个性化…

java 绘图球的移动_求助在JFrame上绘制移动的小球

我想在JFrame中或者Frame中添加一张背景图片&#xff0c;然后在这图片上画出会移动的小球&#xff0c;怎么实现&#xff1f;我的代码把添加背景图片去掉&#xff0c;小球就正常运行了&#xff0c;怎么修改啊&#xff1f;希望各位大侠指教不胜感激&#xff01;&#xff01;&…

apache mesos_试用Apache Mesos HTTP API获得乐趣和收益

apache mesosby Marco Massenzio由Marco Massenzio 试用Apache Mesos HTTP API获得乐趣和收益 (Experimenting with the Apache Mesos HTTP API for Fun and Profit) Apache Mesos is a tool used in production at large-scale services like Twitter and Airbnb. Here’s it…

epoll哪些触发模式_5.epoll的水平触发和边缘触发

本篇是多路复用的第五篇&#xff0c;主要来讲解epoll的水平触发和边缘触发是怎么回事。一、概念介绍EPOLL事件有两种模型&#xff0c;水平出发和边缘触发&#xff0c;如下所示&#xff1a;1. Level Triggered (LT) 水平触发1. socket接收缓冲区不为空 有数据可读 读事件一直触发…

HC系列蓝牙模块连接单片机与电脑,传输数据(蓝牙心电测试)

毕设做无线心电监护。有线的做出来了&#xff0c;AD8232MCULabVIEW上位机。pcb还没时间搞&#xff0c;这个9*7*2.5cm拿来测试能用。 自己做了AD8232的模拟前端&#xff0c;打的板子还没到没法测试。 虽然比较水&#xff0c;但看起来任务也完成的差不多了&#xff0c;于是就想加…