Python 如何相对于PyQt5中的父窗口移动子窗口?

Python 如何相对于PyQt5中的父窗口移动子窗口?,python,pyqt,position,qmainwindow,qrect,Python,Pyqt,Position,Qmainwindow,Qrect,我有下面的代码,但我希望新窗口不完全设置在主窗口的中心。我更愿意将其向左移动一点(例如,向左移动20像素,向上移动20像素),我已经尝试了moveTo()和moveLeft(),但无法真正理解它。我可以使用topLeft()进行管理,但它与主窗口无关。下面是定心代码。问题是如何修改我的代码以获得上面提到的结果 类表单(QMainWindow): 定义初始化(自): QMainWindow.\uuuuu初始化\uuuuuu(自) self.ui=ui\u后缀\u编辑器\u面板() self.ui.

我有下面的代码,但我希望新窗口不完全设置在主窗口的中心。我更愿意将其向左移动一点(例如,向左移动20像素,向上移动20像素),我已经尝试了moveTo()和moveLeft(),但无法真正理解它。我可以使用topLeft()进行管理,但它与主窗口无关。下面是定心代码。问题是如何修改我的代码以获得上面提到的结果

类表单(QMainWindow):
定义初始化(自):
QMainWindow.\uuuuu初始化\uuuuuu(自)
self.ui=ui\u后缀\u编辑器\u面板()
self.ui.setupUi(self)
self.suffix\u列表=suffix\u窗口(父级=self)
self.ui.show.clicked.connect(self.show\u所有后缀\u列表)
self.show()
def显示所有后缀列表(自身):
self.suffix\u list.ui.all\u suffix\u list.clear()
open\u known\u list=open(“known.txt”、“r”)
对于打开的已知列表中的已知。read().split('\n'):
self.suffix\u list.ui.all\u suffix\u list.insertItem(0,已知)
self.suffix_list.show()
类后缀_窗口(QWidget):
def uuu init uuu(self,parent=None):
self.parent=parent
QWidget.\uuuuu初始化(自)
self.ui=ui_后缀_小部件()
self.ui.setupUi(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_半透明背景)
self.ui.exit\u list\u view.clicked.connect(lambda:self.close())
def showEvent(自我、事件):
如果不是,则事件。自发()
geo=self.geometry()
geo.moveLeft(self.parent.geometry().left())
QtCore.QTimer.singleShot(0,lambda:self.setGeometry(geo))
看起来是这样的:

预期结果:

解决此问题的一种方法是首先将子矩形相对于父矩形居中,然后将结果转换为相对偏移:

class Form(QMainWindow):
    ...    

    def show_all_suffix_list(self):            
        self.suffix_list.ui.all_suffix_list.clear()
        open_known_list = open("known.txt", "r")
        for known in open_known_list.read().split('\n'):
            self.suffix_list.ui.all_suffix_list.insertItem(0, known)

        # set initial size
        rect = QtCore.QRect(0, 0, 300, 300)
        # centre on parent
        rect.moveCenter(self.geometry().center())
        # adjust by relative offset (negative values go left/up)
        rect.translate(QtCore.QPoint(-50, 0))

        self.suffix_list.setGeometry(rect)
        self.suffix_list.show()
    

请提供更新的代码@eyllanescIt相对于
窗体
窗口居中,我真正想要的是将其向左定位10-20像素。我不理解你的问题。在您的代码中,您已经在更改几何体,其结果与您所要求的接近。只需正确使用QRect函数(注意,
setLeft
更改宽度,您可能需要使用
moveLeft
)。如果使用moveLeft,则需要一个参数,而该参数与
表单
窗口无关。所以它会在另一个屏幕的左侧打开。谢谢!这就是我要找的!