2012-02-12 80 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

相关问题