2014-07-28 15 views
5

Dưới đây là một ví dụ dưới đây:Làm cách nào để thực thi thêm mã sau khi đóng cửa sổ PyQt?

if __name__ == '__main__': 
    import sys 
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
     QtGui.QApplication.instance().exec_() 
    print "you just closed the pyqt window!!! you are awesome!!!" 

Báo cáo in trên dường như không được thực hiện khi các cửa sổ đang mở hoặc sau khi tôi đóng cửa sổ. Tôi muốn nó in sau khi tôi đóng cửa sổ.

+0

Tôi giả sử có mã để thực sự đặt thứ gì đó trên màn hình? – mdurant

+0

Có nhiều mã hơn. Và nó thực sự in câu lệnh sau khi mở cửa sổ, nhưng tôi muốn nó in câu lệnh chỉ sau khi người dùng đóng cửa sổ. –

Trả lời

8

tôi làm điều đó bằng cách xác định lại phương pháp closeEvent, như thế này:

class YourMainWindow(QtGui.QMainWindow): 

    (...) 

    def closeEvent(self, *args, **kwargs): 
     super(QtGui.QMainWindow, self).closeEvent(*args, **kwargs) 
     print "you just closed the pyqt window!!! you are awesome!!!" 

Tôi hy vọng rằng sẽ giúp

+0

Tôi nghĩ rằng điều này là gần với những gì tôi cần. Có vẻ như bạn đang gọi closeEvent bên trong định nghĩa của closeEvent. Tôi không hiểu chuyện gì đang xảy ra ở đây. Bạn có thể hướng dẫn tôi đến các ví dụ khác bằng cách sử dụng super và closeEvent không? –

+0

Đó chính xác là những gì tôi đang làm. Tôi xác định lại 'closeEvent' để bao gồm câu lệnh in của bạn nhưng tôi cũng bao gồm' closeEvent' ban đầu bởi vì tôi không muốn bỏ lỡ những thứ ban đầu. Tài liệu: https://docs.python.org/2/library/functions.html#super Giải thích tuyệt vời tại đây: http://stackoverflow.com/questions/576169/understanding-python-super-and-init-methods – Federico

+0

Cảm ơn sự giúp đỡ. Tôi sẽ kiểm tra các liên kết đó. –

1

Các công trình sau đây đúng đối với tôi (báo cáo kết quả in ấn cuối cùng được thực hiện):

from PyQt4 import QtGui, QtCore 
app = QtGui.QApplication([]) 
win = QtGui.QMainWindow() 
win.show() 
if __name__ == '__main__': 
    import sys 
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
     QtGui.QApplication.instance().exec_() 
    print "you just closed the pyqt window!!! you are awesome!!!" 
+0

Điều này sẽ in câu lệnh sau khi mở cửa sổ, nhưng tôi muốn nó in câu lệnh chỉ sau khi người dùng đóng cửa sổ. –

+0

Đưa ra câu lệnh 'if' thứ hai để buộc vòng lặp sự kiện chạy. – Luke

+0

Cảm ơn, tôi sẽ thử. –

1

Thông thường, hầu hết các ứng dụng PyQt có các dòng như vậy trong chính:

app = QApplication(sys.argv) 
myclass = MyClass() 
myclass.show() 
sys.exit(app.exec_()) 

Những gì bạn có thể làm là xác định một chức năng mà tất cả các bên trên, và sau đó làm bất cứ điều gì bạn muốn sau khi cuộc gọi đến app.exec_():

def appExec(): 
    app = QApplication(sys.argv) 
    # and so on until we reach: 
    app.exec_() 
    print("my message...") 
    # other work... 

Tất cả những gì bạn sẽ có trong chính là:

sys.exit(appExec()) 
Các vấn đề liên quan