也许我只是度过了糟糕的一天,但我似乎无法让它发挥作用。
我试图设置一个 float 在另一个小部件内的位置,但它似乎总是偏移。
我的布局如下所示,我正在尝试在右上角的 canvas
内制作一个“ float ”小部件。
我使用以下逻辑重新实现了 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()
这是结果:
使用以下方法将两个工具栏添加到 canvas_page
中:
self.canvas_page.layout().insertWidget(2, self.toolbar2)
self.canvas_page.layout().insertWidget(3, self.toolbar)
如果我删除这些调用,它会将小部件移动得更高,但它似乎仍然偏移 settignsLabel_2 和 line_2 的大小
最佳答案
要为小部件设置绝对( float )位置,请重新实现 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_())
关于python - 父级中的相对 QWidget 位置 - 不正确的 Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20279185/