pyqt - 将来自 qt 设计器的子小部件定位在父级附近

Posted

技术标签:

【中文标题】pyqt - 将来自 qt 设计器的子小部件定位在父级附近【英文标题】:pyqt - position child widget from qt designer near parent 【发布时间】:2014-06-27 15:49:57 【问题描述】:

我使用Qt Designer 创建子小部件(布局) - tree_view_widget_ui.py

class Ui_Form(object):
    def setupUi(self, Form, parent = None):
        Form.setObjectName(_fromUtf8("Form"))
        Form.setEnabled(True)
        Form.resize(200, 300)
        Form.setMinimumSize(QtCore.QSize(200, 300))
        self.gridLayout = QtGui.QGridLayout(Form)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.treeWidget = QtGui.QTreeWidget(Form)
        self.treeWidget.setEnabled(True)
        self.treeWidget.setMinimumSize(QtCore.QSize(200, 300))
        font = QtGui.QFont()
        self.treeWidget.setFont(font)
        self.treeWidget.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
        self.treeWidget.setObjectName(_fromUtf8("treeWidget"))
        self.treeWidget.headerItem().setText(0, _fromUtf8("1"))
        self.gridLayout.addWidget(self.treeWidget, 0, 0, 1, 1)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Tree View", None))
        self.treeWidget.setSortingEnabled(True)

我在tree_view_widget.py中初始化子用户界面

from tree_view_widget_ui import Ui_Form

class TreeViewWidget(QWidget):
   def __init__(self, parent=None, flags=0):
       super(TreeViewWidget, self).__init__(parent)
       self.ui = Ui_Form()
       self.ui.setupUi(self, parent = parent)

子小部件从父main.py初始化并用信号打开:

#    tree widget
from tree_view_widget.tree_view_widget import TreeViewWidget 

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.flags = QtCore.Qt.Window
        #    tree view widget
        self.TreeViewWidget = TreeViewWidget(parent=self)
        self.TreeViewWidget.setWindowFlags(self.flags)
        self.TreeViewWidget.show()

我的问题是:如何将子小部件定位在左/右上角重合的父小部件附近,并且不修改文件tree_view_widget_ui.py,因为此代码是从Qt Designer 自动生成的。我设法将子小部件定位到目标位置,但仅在修改文件 tree_view_widget_ui.py 时,但我想尽可能避免这种情况。

【问题讨论】:

【参考方案1】:

class MainWindow:

你会想要使用self.TreeViewWidget.setGeometry(x, y, width, height) 或者你可以使用 move(x, y) 函数。

查看setGeometry 和move 函数的文档

【讨论】:

我在tree_view_widget.py 中尝试过move,但没有成功。正如你所建议的,我在class MainWindow 中使用了move,因为小部件的几何形状在tree_view_widget_ui.py 中定义。它有效!

以上是关于pyqt - 将来自 qt 设计器的子小部件定位在父级附近的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 paintEvent 传播到子小部件

如何将 QStackedWidget 大小设置为子小部件的最小尺寸?

Qt半透明背景导致子小部件在父小部件中“印记”

Pyqt QMdiSubWindow 使用可变数量的小部件调整大小

如何在 Flutter 的 ListView 中显示特定小部件的子小部件?

具有重叠子小部件的 Qt 自定义小部件