PyQt4:第二个窗口不显示

Posted

技术标签:

【中文标题】PyQt4:第二个窗口不显示【英文标题】:PyQt4: Second window does not show 【发布时间】:2016-09-30 13:45:20 【问题描述】:

这是打开登录页面的代码 open.py(主文件),该页面有一个按钮,单击该按钮会关闭登录页面并打开一个菜单页面:

from PyQt4 import QtGui
import sys
from loginpage import Ui_loginPage
from menu import Ui_Menu

class Form1(QtGui.QWidget, Ui_loginPage):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        self.setupUi(self)
        self.login.clicked.connect(self.handleButton)
        self.window2 = None

    def handleButton(self):
        self.close()
        if self.window2 is None:
            self.window2 = menu(self)
        self.window2.show()
        sys.exit(app.exec_())


class menu(QtGui.QWidget, Ui_Menu):     
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        self.setupUi(self)

if __name__ == '__main__':       

    app = QtGui.QApplication(sys.argv)
    window = Form1()
    window.show()
    sys.exit(app.exec_())

代码运行良好,没有任何错误,但是当我单击登录按钮时,登录页面关闭但菜单页面没有出现。它根本不显示。

【问题讨论】:

menu 不接受任何参数,你为什么要传递它self 我做了一些改变,并没有在菜单中传递自我.....仍然没有运气 【参考方案1】:

如果menu 窗口是Form1 窗口的子窗口,那么当Form1 窗口关闭时它将被隐藏——所以不要给它一个父窗口。你也不应该再次调用sys.exit(app.exec_()),所以你的代码应该是这样的:

class Form1(QtGui.QWidget, Ui_loginPage):
    ...

    def handleButton(self):
        self.close()
        if self.window2 is None:
            self.window2 = menu()
        self.window2.show()

PS:有关如何在 PyQt 中实现登录对话框的更完整示例,请参阅 this answer。

【讨论】:

以上是关于PyQt4:第二个窗口不显示的主要内容,如果未能解决你的问题,请参考以下文章

第二个 UIWindow 不显示(iPad)

菜单栏未显示在第二个窗口上

想让JS弹出窗口显示在第二个(辅助)显示器上?

使用多个不都支持横向模式的 UIWindows 时出现问题

如何在 PyQt4 创建的 GUI 中以富格式显示一些不可编辑的文本?

如何通过按下 Pyqt5 或 PyQt4 工具栏中的按钮来设置表单的显示