在 PyQt5 中打开一个窗口和关闭一个窗口

Posted

技术标签:

【中文标题】在 PyQt5 中打开一个窗口和关闭一个窗口【英文标题】:Open a window and close a window in PyQt5 【发布时间】:2017-08-16 21:28:21 【问题描述】:

我正在尝试从欢迎屏幕加载一个带有 UI 窗口的新类,同时关闭欢迎屏幕。当我单击按钮打开新窗口时,它可以正常打开,但我只想关闭动作事件的第一个窗口。

我尝试了.hide().terminate().destroy(),但窗口仍然存在。

这是相关代码:

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()                
        #self.email_blast_widget = EmailBlast()
        #self.setCentralWidget(self.email_blast_widget)
        self.welcome = OpeningWindow()
        self.setCentralWidget(self.welcome)        
        bar = self.menuBar()
        file_file = bar.addMenu('File')         
        file_edit = bar.addMenu('Edit')

    def load_email(self):
        self.mail = EmailBlast()        
        self.mail.show()
        self.welcome = OpeningWindow()
        self.destroy()

class OpeningWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.welcome = QtWidgets.QLabel("Welcome To Zach's \nEmail Blast Widget")
        self.email_button = QtWidgets.QPushButton("Email")
        self.csv_button = QtWidgets.QPushButton("CSVs")
        self.exit_button = QtWidgets.QPushButton("Exit")

        self.init_ui()

 def init_ui(self):
    # set layout to place widgets
    self.email_button.clicked.connect(self.load_email)
    self.csv_button.clicked.connect(self.load_csv)
    #self.exit_button.clicked.connect(self.exit)
    self.exit_button.clicked.connect(QtWidgets.qApp.quit)


class EmailBlast(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()     
        # create widgets

【问题讨论】:

self.destroy() 更改为self.close() 我已经尝试过您的代码,它可以按您的意愿工作,当第二次销售开始时,第一次销售结束。 @eyllanesc 谢谢,我编辑是因为我发现了问题。另外,为了让它退出,我可以回答我自己的问题。函数是self.exit_button.clicked.connect(QtWidgets.qApp.quit) 一件事是关闭窗口,另一件事是退出应用程序。 @eyllanesc 对。如果不只是欢迎屏幕,那将不是一个好的解决方案。 【参考方案1】:
self.exit_button.clicked.connect(QtWidgets.qApp.quit)

此解决方案适用于我的目的,但是,如果您尝试在不关闭应用程序的情况下关闭窗口,这将不起作用。使用 self.close()

【讨论】:

一件事是关闭窗口,另一件事是退出应用程序。

以上是关于在 PyQt5 中打开一个窗口和关闭一个窗口的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5从子窗口关闭父窗口和子窗口

为啥在 PyQt5 中打开新窗口时我的应用程序会关闭?

按下保存按钮pyqt5后关闭第二个小部件

PyQt5 window.close() 不会关闭窗口,但 window.open() 工作正常

关闭窗口时如何触发pyqt5信号[重复]

PyQt5如何在第一个窗口关闭时更改第二个窗口