2012-02-12 78 views
14

有沒有辦法檢測用戶是否嘗試關閉窗口? 例如,在Tkinter的,我們可以做這樣的事情:PySide/PyQt檢測用戶是否嘗試關閉窗口

def exit_dialog(): 
    #do stuff 
    pass 

root = Tk() 
root.protocol("WM_DELETE_WINDOW", exit_dialog) 
root.mainloop() 

感謝。

回答

48

覆蓋您主窗口中QWidgetcloseEvent方法。

例如:

class MainWindow(QWidget): # or QMainWindow 
    ... 

    def closeEvent(self, event): 
     # do stuff 
     if can_exit: 
      event.accept() # let the window close 
     else: 
      event.ignore() 

另一種可能性是使用QApplicationaboutToQuit信號是這樣的:

app = QApplication(sys.argv) 
app.aboutToQuit.connect(myExitHandler) # myExitHandler is a callable 
+5

注意,這將不會在主線程工作繁忙計算。應該將計算移到另一個線程才能關閉窗口。 – d33tah 2013-02-26 22:52:06

+1

請注意,在QMainWindow中,沒有屬性'canExit' – Tcll 2015-05-06 15:43:59

+1

@Tll,在Qt庫中沒有任何屬性(據我所知,但絕對不在QWidget或QMainWindow中)。 重點是:將其定義爲自定義處理程序。 – 2016-01-07 21:27:19

相關問題