PyQt QWidget的绝对位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyQt QWidget的绝对位置相关的知识,希望对你有一定的参考价值。

我有一个QDialog有一个布局,在这个布局有多个QWidgets。现在我有一个按钮,如果用户按下此按钮,我想显示一个“工具提示”,显示更多信息。这个“工具提示”必须包含一个布局。

为此,我想使用具有绝对位置的QWidget。当我把this question中提到的代码放在一起时,解决方案对我不起作用。我也尝试使用QtWidget.raise_()函数,但没有显示QWidget

我将我的代码剥离到以下示例:

# creating content
layout = QtWidgets.QVBoxLayout()
for i in range(0, 10):
    layout.addWidget(QtWidgets.QLabel("line {} - bla bla bla bla bla bla".format(i)))

widget = QtWidgets.QWidget()
widget.setLayout(layout)    

# creating dialog and apply the layout
dialog = QtWidgets.QDialog()
dialog.setLayout(layout)

# creating the absolute positioned widget
absolute_layout = QtWidgets.QVBoxLayout()
absolute_layout.addWidget(QtWidgets.QLabel("Absolute positioned QWidget"))
absolute_layout.addWidget(QtWidgets.QLabel("With some widgets in itself"))
absolute_layout.addWidget(QtWidgets.QLabel("With some widgets in itself"))
absolute_layout.addWidget(QtWidgets.QLabel("With some widgets in itself"))

absolute = QtWidgets.QWidget(dialog)
absolute.setLayout(absolute_layout)

# show the absolute widget and move it
absolute.show()
absolute.move(10, 10)
absolute.raise_()

dialog.show()

该对话框正确显示layout中的内容,但未显示absolute

我究竟做错了什么?

答案

通过使用...

absolute = QtWidgets.QWidget(dialog)

你让absolute成为dialog的孩子。因此,absolute的几何形状总是受到dialog的某种程度的支配。如果您希望能够指定小部件的绝对几何使用...

absolute = QtWidgets.QWidget()
另一答案

所以在@ G.M的帮助下。我发现解决方案非常简单:

absolute = QtWidgets.QWidget()
absolute.setParent(dialog)

我期待QWidget::QWidget(QWidget * parent = 0, Qt::WindowFlags f = 0)构造函数在内部调用QWidget::setParent(QWidget * parent)方法(这不是真的吗?)。

以上是关于PyQt QWidget的绝对位置的主要内容,如果未能解决你的问题,请参考以下文章

必须在 QWidget Pyqt5 之前构造 QApp

PyQt5学习记录---布局管理

PyQt5-绝对定位+QLabel的创建-8

PyQt5 QWidget不填充父

PyQt 打印 QWidget

来自 QWidget 的 PyQt5 通知