親の中央に QMessageBox を表示しようとしていますが、親の親の上に表示されているように見えます。次のコードは、2x2 グリッドに 4 つのプッシュ ボタンを生成します。ボタンがクリックされると、対応するメッセージ ボックスが、クリックされたボタン (つまり、親) の中央に表示されるようにしたいと思います。ただし、常に含まれているウィジェットの中央に表示されます。
from PyQt4 import QtCore, QtGui
class ClickHandler(QtCore.QObject):
def __init__(self, parent=None):
super(ClickHandler, self).__init__(parent)
def onClicked(self):
sender = self.sender()
print sender
QtGui.QMessageBox.information(sender, 'onClicked', 'Using static method')
mb = QtGui.QMessageBox(sender)
mb.setWindowTitle('onClicked')
mb.setText('Using object and exec')
mb.exec_()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
ch = ClickHandler()
layout = QtGui.QGridLayout()
for i in xrange(4):
pb = QtGui.QPushButton('button %d' % i)
pb.clicked.connect(ch.onClicked)
layout.addWidget(pb, i // 2, i % 2)
w = QtGui.QWidget()
w.setLayout(layout)
w.resize(600, 600)
w.show()
sys.exit(app.exec_())
QMessageBoxのドキュメントによると:
親は QDialog コンストラクターに渡されます
QDialogのドキュメントによると:
親がある場合、そのデフォルトの位置は親の上に中央揃えされます
何が間違っているのか、何が欠けているのかわかりません。どんな助けでも大歓迎です。ありがとう。