pyqt - 在qt设计器中将子控件定位在父控件附近

1 投票
1 回答
1349 浏览
提问于 2025-04-18 11:21

我使用 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 个回答

1

class MainWindow 里:

你可以使用 self.TreeViewWidget.setGeometry(x, y, width, height) 来设置窗口的位置和大小,或者你也可以用 move(x, y) 函数来移动它。

可以查看 setGeometrymove 函数的文档了解更多信息。

撰写回答