父级中的相对QWidget位置 - 不正确的Y.

时间:2013-11-29 05:48:46

标签: python qt pyqt

也许我只是度过了糟糕的一天,但我似乎无法让它发挥作用。

我正在尝试将窗口小部件的位置设置在另一个窗口中,但它似乎总是偏移。

我的布局看起来像这样,我正在尝试在右上角的canvas内制作一个“浮动”小部件。

enter image description here

我用这个逻辑重新实现了show方法(也尝试了showEvent):

def show(self):
    pos = self.parent().mapToGlobal(self.parent().pos())
    topright = self.parent().rect().topRight()
    self.resize(QSize(self.geometry().width(), self.parent().geometry().size().height()))
    newpos = (pos + topright) - QPoint(self.geometry().width(), 0)
    self.move(newpos)
    super(InfoDock, self).show()

结果如下:

enter image description here

使用以下内容将两个工具栏添加到canvas_page

self.canvas_page.layout().insertWidget(2, self.toolbar2)
self.canvas_page.layout().insertWidget(3, self.toolbar)

如果我删除这些调用,它会将小部件移动得更高,但它似乎仍然偏移了settignsLabel_2和line_2的大小

1 个答案:

答案 0 :(得分:2)

要为窗口小部件设置绝对(浮动)位置,请重新实现其父级的resizeEvent,以及相对于该父级的小部件move()

def resizeEvent(self, event):
    # move to top-right corner
    self.widget.move(self.width() - self.widget.width() - 1, 1)
    super(Canvas, self).resizeEvent(event)

<强>更新

工作演示脚本:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        toolbar = self.addToolBar('Toolbar')
        toolbar.addAction('Action')
        widget = QtGui.QWidget(self)
        layout = QtGui.QVBoxLayout(widget)
        self.canvas = Canvas(widget)
        layout.addWidget(self.canvas)
        self.setCentralWidget(widget)

class Canvas(QtGui.QGraphicsView):
    def __init__(self, parent):
        super(Canvas, self).__init__(parent)
        self.widget = QtGui.QComboBox(self)

    def resizeEvent(self, event):
        self.widget.move(self.width() - self.widget.width() - 2, 2)
        super(Canvas, self).resizeEvent(event)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    window.setGeometry(500, 300, 200, 200)
    sys.exit(app.exec_())