重点领域是守则的这一部分:
prect = self.parent.rect() # <===
prect1 = self.parent.geometry() # <===
center = prect1.center() # <===
self.move(center) # <===当我使用prect.center()时,它在中间正确地居中,但是如果我移动窗口并使用菜单(Action >ShowWindow2),Window2就不会相对于父窗口显示居中。
当我使用prect1.center()时,它没有正确地对方框( Window2的左上角坐标在中间),但是如果我将父窗口移到其他地方,它就会相对于父窗口移动。
问题:相对于Window在屏幕上的位置,如何修改代码以显示Window中心的Window2?
可复制代码示例:
import sys
from PyQt5 import QtGui
from PyQt5.QtWidgets import (QApplication, QMainWindow, QAction)
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.top = 100
self.left = 100
self.width = 680
self.height = 500
self.setWindowTitle("Main Window")
self.setGeometry(self.top, self.left, self.width, self.height)
menu = self.menuBar()
action = menu.addMenu("&Action")
show_window2 = QAction("Show Window2", self)
action.addAction(show_window2)
show_window2.triggered.connect(self.show_window2_centered)
self.show()
def show_window2_centered(self):
self.w = Window2(parent=self)
self.w.show()
class Window2(QMainWindow):
def __init__(self, parent=None):
self.parent = parent
super().__init__()
self.setWindowTitle("Centered Window")
prect = self.parent.rect() # <===
prect1 = self.parent.geometry() # <===
center = prect1.center() # <===
self.move(center) # <===
print(prect)
print(prect1)
print(center)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec())目前的情况如下:

希望它相对于主窗口居中:

发布于 2019-06-30 06:36:06
首先,self.w不是Window的子级,因为您没有将该参数传递给super()。另一方面,move()不把小部件放在那个位置的中心,它所做的就是左上角位于那个位置。
解决方案是使用其他元素的几何图形修改几何,因为它们都是窗口:
class Window2(QMainWindow):
def __init__(self, parent=None):
self.parent = parent
super().__init__()
self.setWindowTitle("Centered Window")
geo = self.geometry()
geo.moveCenter(self.parent.geometry().center())
self.setGeometry(geo)https://stackoverflow.com/questions/56822794
复制相似问题