2017-08-16 554 views
0

我想从一个欢迎屏幕的UI窗口中加载一个新的类,同时关闭欢迎屏幕。当我点击按钮去打开新窗口时,它会打开,但我只想关闭动作事件的第一个窗口。打开一个窗口,关闭一个窗口在PyQt5

我试过.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 
+0

将'self.destroy()'更改为'self.close()' – eyllanesc

+0

我试过了你的代码,它可以像你想的那样工作,当第二个销售被打开时,第一个销售被关闭。 – eyllanesc

+0

@ eyllanesc谢谢,我编辑是因为我发现了这个问题。另外,为了让它退出,我可以回答我自己的问题。该函数是self.exit_button.clicked.connect(QtWidgets.qApp.quit) – EwokHugz

回答

-1
self.exit_button.clicked.connect(QtWidgets.qApp.quit) 

该解决方案适用于我的目的,但是,如果你想关闭一个窗口没有关闭,这将不使用的应用程序。使用self.close()

+0

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

相关问题