私は、その中心が親ウィジェットの中心に揃うようにQMessageBoxウィジェットを中心に配置しようとしています。Pyqt5ウィジェットでウィジェットを中心にする
これはちょうど左上の角を揃え:
msgBox.move(parent.pos())
私がしようとすると、ウィジェット寸法に基づいてセンターを揃えるためにいくつかの数学をしました。
これは親の中央にメッセージボックスの左上隅揃え:さらに継続
x1 = parent.frameGeometry().width()
y1 = parent.frameGeometry().height()
#Offset msgBox by half of parent's width and height
msgBox.move(parent.pos().x() + x1/2, parent.pos().y() + y1/2)
を、このはのMsgBoxと親の両方のx軸を揃える必要がありますが、メッセージボックスが間違って
オフセットされます:
x1 = parent.frameGeometry().width()
y1 = parent.frameGeometry().height()
x2 = msgBox.frameGeometry().width()
y2 = msgBox.frameGeometry().height()
#Offset msgBox by half of parent's width and height
#Then offset msgBox back by half of its width
msgBox.move(parent.pos().x() + x1/2 - x2/2, parent.pos().y() + y1/2)
これが正しく動作しないのはなぜですか?正しい解決策は何ですか?ありがとうございました!
編集:ここでは
は、同じ結果を与える私のプログラムの簡易版である:
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_Form(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setupUi(self)
def infoBox(self):
#Create Info box
infoBox = QtWidgets.QMessageBox()
infoBox.setIcon(QtWidgets.QMessageBox.Warning)
infoBox.setText("Warning:")
message = "Blank entries indicate no corresponding Misc word and will be omitted from the output file."
message += "\n\nConvert anyway?"
infoBox.setInformativeText(message)
infoBox.setWindowTitle("Warning")
infoBox.setStandardButtons(QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel)
#Position infoBox
infoBox.move(self.rect().center())
#Execute infoBox
reply = infoBox.exec_()
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 400)
self.main_Layout = QtWidgets.QVBoxLayout(Form)
self.main_Layout.setObjectName("main_Layout")
#Add b utton
self.button = QtWidgets.QPushButton(Form)
font = QtGui.QFont()
font.setPointSize(10)
self.button.setFont(font)
self.button.setObjectName("saveDefault")
self.main_Layout.addWidget(self.button)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Test"))
self.button.setText(_translate("Form", "Warning"))
self.button.clicked.connect(self.infoBox)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ex = Ui_Form()
ex.show()
sys.exit(app.exec_())
は、あなたがそれを投げたときにのみ集中したいかまたはあなたがしたいですかそれは常に中央にあるのですか? – eyllanesc
私はそれを投げるときだけ。 – Jaitnium
私の答えを参照してください、 – eyllanesc