PyQt(Python+Qt)学习随笔:在父窗口中弹出子窗口无法显现的问题
在学习和测试PyQt相关部件功能的时候,老猿经常是不同的窗口新建一个类,再新建一个Application来使用这个窗口类进行测试。
为了减少应用框架代码的重复开发,老猿决定采用主窗口叠加测试窗口的模式来进行功能测试,即主窗口和主程序基本保持不变,采用主窗口点击按钮弹出测试窗口的形式来验证测试窗口的功能,这样不用每回都新建工程,也不用重写(其实基本上是赋值粘贴)主程序的代码。
于是老猿创建了一个QWidget类型的应用主窗口,在主窗口上加了一个“弹出窗口”的按钮,并建立了按钮clicked信号和槽函数之间的连接。槽函数代码如下:
def popWin(self):
popwin = popWinTestWin() #创建测试窗口对象
popwin.show()
代码完成后,执行却发现窗口一闪而逝。进行代码调试,发现大部分情况下,如果采用单步跟踪模式则可以,有时也不行,其他都无法正常显示子窗口。于是到处查资料,没有查到PyQt在网上有类似的问题,而Qt的C语言代码倒是碰到过,有人答复是不该在槽函数本地空间中创建对象,会导致栈溢出,也有人说主窗口和弹出窗口不能是同一种类型,但没有详细说是大类型如QWidget还是派生类型自定义的。
老猿写了个测试程序,提供不同类型的弹出窗在不同名字空间创建后弹出的功能。
如图:

对应槽函数代码如下:
def createPopwin(self,winTypeChoice):
if winTypeChoice == 0:
w = popWinTestWin()
elif winTypeChoice == 1:
w = widgetPopWin()
else:
w = dialogPopWin()
return w
def popWin(self):
winTypeChoice = self.popTypeChoice.checkedId()
namespaceChoice = self.popNamespaceChoice.checkedId()
if namespaceChoice == 0:
popwin = self.createPopwin(winTypeChoice)
popwin.show()
elif namespaceChoice == 1:
self.popwin = self.createPopwin(winTypeChoice)
self.popwin.show()
else:
QtWidgets.qApp.popwin = self.createPopwin(winTypeChoice)
QtWidgets.qApp.popwin.show()
经过测试发现就是弹窗采用槽函数局部变量创建时存在问题,但问题原因还是没找到,夜深了直接睡了,第二天一醒来豁然开朗,这个问题其实就是局部变量的生命周期问题,槽函数结束局部变量生命周期结束,因此对应窗口就消失了。所以在槽函数中弹出窗口,必须用非局部变量。
博客地址:https://blog.csdn.net/LaoYuanPython
老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036
PyQt(Python+Qt)学习随笔:在父窗口中弹出子窗口无法显现的问题的更多相关文章
- PyQt(Python+Qt)学习随笔:设定toolButton弹出菜单的方法
在Qt Designer中toolButton可以通过popupMode设定菜单弹出的模式,但并不能在Qt Designer中指定toolButton的弹出菜单,toolButton只能通过代码来指定 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中窗口对象的windowFilePath属性
windowFilePath属性仅对窗口对象有效,用于关联一个窗口和对应的文件及路径. 当窗口没有设置标题属性的情况下,则窗口标题展示展示windowFilePath对应的文件名的信息(路径信息不展示 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性
autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...
- PyQt(Python+Qt)学习随笔:视图中的拖放操作注意事项
老猿Python博文目录 老猿Python博客地址 在通过PyQt构建的图形界面中进行拖放,要成功进行拖放需要注意: 视图相关属性需要支持拖放,具体相关属性请参考<PyQt(Python+Qt) ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性
toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...
- PyQt(Python+Qt)学习随笔:布局控件layout的layoutSizeConstraint属性不起作用的问题解决办法
在<PyQt(Python+Qt)学习随笔:布局控件layout的layoutSizeConstraint属性>中介绍layout的layoutSizeConstraint属性后,反复测试 ...
- PyQt(Python+Qt)学习随笔:实现toolButton与Action的关联
在Qt Designer中,如果创建的窗口为主窗口QMainWindow类型,可以通过<PyQt(Python+Qt)学习随笔:Qt Designer中怎么给toolBar添加按钮 >介绍 ...
- PyQt(Python+Qt)学习随笔:利用QWidget部件的palette以及ColorGroup、colorRole局部调整部件的特定范围颜色
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<PyQt(Python+Qt)学习随笔:QWidget部件的 ...
- PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性不能覆盖写的问题
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dra ...
- PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性
老猿Python博文目录 老猿Python博客地址 一.属性的作用 dragDropOverwriteMode属性用于控制视图的拖放行为,如果其值为True,则视图中选定的数据将在拖拽数据放下时被覆盖 ...
随机推荐
- 5 Post和Get
5 Post和Get GET和POST有什么区别?及为什么网上的多数答案都是错的 知乎回答 get: RFC 2616 - Hypertext Transfer Protocol -- HTTP/1. ...
- 新疆地形数据下载:30米、12.5米、5米DEM地形数据
新疆是我国陆地面积最大的省级行政区,总面积达166万平方公里.新疆的地形也十分的复杂,新疆的地形呈山脉与盆地相间排列,盆地被高山环抱,,俗称"三山夹两盆".三山指阿尔泰山.昆仑山. ...
- ECMAScript6标准-简介
Introduction This Ecma Standard defines the ECMAScript 2015 Language. It is the sixth edition of the ...
- Cacti如何实现电话告警
Cacti是一套基于PHP,MySQL,SNMP及RRD Tool开发的网络流量监测图形分析工具.Cacti提供了一个快速轮询器,高级图表模板,多种数据采集方法和用户管理功能.所有这一切都被包装在一个 ...
- http 响应 ngx_http_send_header ngx_http_output_filter
在解析完 http 请求报文后, 需要发出响应报文, 那么ngx 框架 提供了那些通用接口呢?如果自己设计将所用的模块的响应接口合并起来 你会怎么设计呢?? 响应头过滤函数主要的用处就是处理HTTP ...
- http 结构初始化
简要而说:accept 到连接后 根据fd 构建一个connection 由于是 http : 重新封装为http-connection:同时设置fd的读回调: 回调函数根据是否是https/htt ...
- 极客mysql13
1:为啥删除了表的一半数8据,表文文件大小没变化?因为delete 命令其实只是把记录的位置,或者数据页标记为了"可复用",但磁盘文件的大小是不会变的.也可以认为是一种逻辑删除,所 ...
- 通过ceph-deploy安装不同版本ceph
之前有在论坛写了怎么用 yum 安装 ceph,但是看到ceph社区的群里还是有人经常用 ceph-deploy 进行安装,然后会出现各种不可控的情况,虽然不建议用ceph-deploy安装,但是既然 ...
- SpringBoot加载配置文件的几种方式
首先回忆一下在没有使用SpringBoot之前也就是传统的spring项目中是如何读取配置文件,通过I/O流读取指定路径的配置文件,然后再去获取指定的配置信息. 传统项目读取配置方式 读取xml配置文 ...
- CSS3之flex布局
若要使用flex布局,需在父元素上声明" display : flex ",这样它所有的直系子元素就成为flex元素 1.居中 1)垂直居中:align-items : cente ...