0

QMainWindow を利用し、UIC ファイルも使用する File->Exit 機能を備えた QMenuBar を持つアプリケーションを作成しようとしています。私の努力にもかかわらず機能しない部分までプロジェクトを削除しました - closeEvent が呼び出され、受け入れられますが、ウィンドウは閉じません。これが私のtest.pyです:

#! /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>

私は何を間違えましたか?

4

2 に答える 2

2

ここでより良い答えが見つかるかもしれません

PyQt: X をクリックしても closeEvent がトリガーされない

問題は内部にあるようですが、

    self.ui = uic.loadUi("test.ui")
    self.ui.show()

self.ui というインスタンスが作成されている場所

于 2013-05-25T07:26:20.207 に答える
0

あなたは closeEvent をオーバーライドしているように見えますが、その中で何もしていません。呼び出しevent.accept()は実際にはイベントを実行しません。これは、イベント オブジェクトが受け入れられたことを伝えるだけで、イベントが伝播し続けないようにします。C++ ランドでは、このようなことをする必要があります

void closeEvent(QCloseEvent *Event) {
    // do some stuff
    QMainWindow::closeEvent(event);
}

の close イベントへの呼び出しに注意してくださいQMainWindow。これは、実際にウィンドウを閉じるためのコードが配置されている場所です。

于 2013-04-01T15:34:00.757 に答える