我試圖編寫一個應用程序,利用QMainWindow並有一個QMenuBar那裏與文件 - >退出功能,它也使用UIC文件。我已經將我的項目剝離到了儘管我的努力無法工作的部分 - closeEvent被調用,它被接受,但窗口不關閉。這裏是我的test.py:QMainWindow.close不關閉窗口,儘管event.accept on closeEvent
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import sys
from PyQt4 import QtCore, QtGui, uic
class TruEdit(QtGui.QMainWindow):
def __init__(self):
QtGui.QDialog.__init__(self)
self.ui = uic.loadUi("test.ui")
self.ui.show()
self.ui.actionWyj_cie.triggered.connect(self.wyjscie)
def wyjscie(self):
self.close()
def closeEvent(self, event):
event.accept()
print("WTF, still alive")
@QtCore.pyqtSlot()
def reject(self):
print("Never entered this")
return None
if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
app.setQuitOnLastWindowClosed(True)
window = TruEdit()
sys.exit(app.exec_())
而這裏的test.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuPlik">
<property name="title">
<string>Plik</string>
</property>
<addaction name="actionWyj_cie"/>
</widget>
<addaction name="menuPlik"/>
</widget>
<widget class="QStatusBar" name="statusbar">
<property name="statusTip">
<string/>
</property>
</widget>
<action name="actionWyj_cie">
<property name="text">
<string>Wyjście</string>
</property>
<property name="shortcut">
<string>Ctrl+K</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>
我做了什麼錯?
+1:這是答案。提問者的代碼創建了兩個窗口:一個來自顯示的self.ui,另一個來自底層代碼中創建的窗口,它從不顯示。提問者的代碼不起作用,因爲它試圖關閉從未打開過的窗口。 –