gpt4 book ai didi

python - 相对于父 QMainWindow 居中子 QMainWindow

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:06 24 4
gpt4 key购买 nike

重点关注这部分代码:

prect = self.parent.rect() # <===
prect1 = self.parent.geometry() # <===
center = prect1.center() # <===
self.move(center) # <===

当我使用 prect.center() 时,它会将框正确地居中,但是如果我移动窗口并使用菜单(Action > Show Window2),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())

目前看起来像这样:

Child QMainWindow not centered

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

centered QMainWindow to Parent

最佳答案

首先 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)

关于python - 相对于父 QMainWindow 居中子 QMainWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56822794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com