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,则视图中选定的数据将在拖拽数据放下时被覆盖 ...
随机推荐
- HTML生成横向的PDF
HTML生成PDF请参照:https://www.cnblogs.com/yunfeiyang-88/p/10984740.html 如要生成横向的PDF:在html模板的style标签里面加入@pa ...
- Java多线程经典题目(医院挂号)
题目 实现一个医院的挂号机系统,要求:有多台挂号机同时运行,此时无论有多少患者挂号,要求都能挂到不同 的号码,并且要求实现当意外断电之后,下一次恢复还能从上次结束号码继续挂号? * synchroni ...
- 7. 基于MLlib的机器学习
*以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第七部分是讲的是如何使用Spark中提供机器学习函数的MLlib库,在集群中并行运行机器学习算法. MLlib是Spark中提 ...
- PF_PACKET抓包mmap
PACKET套接口创建 内核函数packet_create处理PF_PACKET套接口的创建工作.其参数sock->type决定了采用哪一种工作模式,如果参数type为SOCK_PACKET即第 ...
- logback怎么写?分类输出日志到不同的文件
此appender有顺序,最好不要乱调顺序,输出日志如下: drwxr-xr-x 2 root root 4096 Dec 3 00:00 2019-12-02drwxr-xr-x 2 root ro ...
- 解决自动安装Freebsd系统盘符无法确定问题
最近因为需要用到Freebsd,所以研究了打包的一些方法,这个没什么太大问题,通过网上的一些资料可以解决,但是由于确实不太熟悉这套系统,还是碰上了一些比较麻烦的地方,目前也没看到有人写如何处理,那就自 ...
- C#高级编程之泛型一(泛型的引入、泛型的使用、何为泛型)
为何引入泛型 当我们要对不同类型的参数执行类似的方法时:如下所示功能打印传入参数的相关信息. class CommonMethdod { /// <summary> /// show in ...
- Java基础—Java方法的调用
Java方法的调用个主要有以下几种: 1.调用非静态方法 2.调用静态方法 3.方法与方法之间的调用 (1).静态方法内部调用其他方法 (2).非静态方法内部调用 1.调用非静态方法: 非静态方法的调 ...
- 金九银十想面BAT?那这些JDK 动态代理的面试点你一定要知道
一.什么是代理 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模式UM ...
- java大厂面经-阿里腾讯、网易美团、京东、华为、快手、字节全在这里了
前言 在这篇文章详细说了该如何去复习,之前也答应各位把面经整理一下,但是因为入职的事情耽搁了,现在整理出来回馈给大家! 美团 一面 0.自我介绍1.问项目(项目详细介绍.用到什么技术.有什么优化)2. ...