过程如下:

创建Widget窗体后,先转为py文件,然后新建一个CallMainUI.py文件用来对基本UI界面做修改及添加信号与槽的响应。

在CallMainUI.py文件中设置单击pushButton弹出一个列表对话框:

class MainWin(QMainWindow, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.pop_win)
    def pop_win(self):
        lst_widget = QListWidget()
        lst_widget.addItems(['item1', 'item2', 'item3'])
        lst_widget.show()

运行后,点击按钮,子窗口闪退了。为什么呢?

原因分析:

对话框分为两种: 模态对话框与非模态对话框

模态对话框:在弹出模态窗口时会锁定整个程序,使之处于等待状态,直到用户关闭该对话框。这时往往需要对话框的返回值进行接下来的操作。如确认对话框,需要点击是或否关闭它。
非模态对话框,当非模态对话框被打开时,用户可以和该对话框进行交互,也可以选择同应用程序的其他窗口交互。如查找框。

显示窗口的2个函数:

show() 显示一个非模态对话框,在调用弹出窗口之后,调用即刻返回给调用函数,继续下面的操作。函数执行完后,弹出窗口就被释放了。

需求:在主 窗口 中点击【打开】按钮后, 弹出 一个 窗口 ,同 按钮上的文字变成【关闭】,再次点击即可关闭 窗口 ! 分析:其实 弹出 窗口 并不难实现,关键是同一个按钮实现打开与关闭的功能,这个需要注意实现的方式以及一些细节,需要用到lambda表达式,具体步骤如下: 1、首先新建一个项目,创建一个空 窗口 文件,如下图1所示,然后鼠标右键点击项目,选择添加新文件,选择C++ Class类型,然后选择基于QWid...
问题1:通过点击Button打开新 窗口 后,如何实现不关闭新 窗口 的情况下再点击Button 不会新建 窗口 ,而是显示先前打开的 窗口 ?(以前用tkinter 遇到这个问题,是使用一个boolean值来做开关,如果对象已创建,就不新建,否则新建,然后关闭 窗口 在控制该boolean,该 方法 可行但是比较麻烦) 分析:有两种 方法 : 1.新建 窗口 使用exec_()函数(显示一个模式对话框,并且锁住程序直到...
pyqt 窗口 跳转的 候会 闪退 : 原因是没有把QMainWindow()放到主进程的self中。如果不加self,则没有app = QApplication(sys.argv)支持,无法循环 窗口 。看到的 闪退 实则是开启一次 窗口 后退出。 解决 办法: 给 窗口 加上self,让其支持循环。     在使用 pyqt 5 ,程序运行 间过长可能会造成界面假死的情况,为了 解决 这个问题,可以采用多线程。将程序放到 线程中运行。     这里 pyqt 5 多线程用的 方法 是继承Qthead类,然后重写run()函数实现。 # 多线程的实现 class MyThread(QThread): _signal = pyqt Signal(object) # 自定义信号,用于传递数据等 def __init__(self): super().__init__()
PYQT 5 点击菜单栏 弹出 窗口 解决 窗口 闪退 的问题 需要通过self实例化为全局变量,不加self的话,一运行就会被收回,所以无法显示 def rabbit_talk(self): from asrInterface import Ui_Dialog '''要加self''' self.Dialog = QMainWindow() Ui_Dialog().setupUi(self.Dialog)