PySide (Qt) - 布局失效

2 投票
1 回答
1013 浏览
提问于 2025-04-18 03:25

我正在尝试用PySide创建一个简单的应用程序,但看起来我没有好好阅读文档。这是我的代码:

from PySide.QtGui import *
from PySide.QtCore import Qt

class Window(QMainWindow):
    def __init__(self, parent = None):
        QMainWindow.__init__(self, parent)

        self.scene = QGraphicsScene()
        self.view1 = QGraphicsView(self.scene, self)
        self.view2 = QGraphicsView(self.scene, self)

        self.gridLayout = QGridLayout()
        self.gridLayout.addWidget(self.view1, 0, 0, Qt.AlignLeft)
        self.gridLayout.addWidget(self.view2, 0, 1, Qt.AlignRight)
        self.gridLayout.setColumnMinimumWidth(0, 300)
        self.gridLayout.setColumnMinimumWidth(1, 300)
        self.setLayout(self.gridLayout)

        self.view1.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.view2.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

        self.scene.addLine(0, 0, 1000, 1000)

if __name__ == "__main__":
    app = QApplication(())
    window = Window()
    window.showMaximized()
    app.exec_()

代码可以运行,但我本来希望能显示一个窗口,里面有两个QGraphicsView,这样窗口就能被分成两半。但实际上我只看到一个最小尺寸的QGraphicsView。有人能帮我解决这个问题吗?

提前谢谢大家。

1 个回答

3

你需要为一个 QMainWindow 创建一个中央小部件,然后在这个小部件上设置布局。下面是简化后的例子:

from PySide.QtGui import *

class Window(QMainWindow):
    def __init__(self, parent = None):
        QMainWindow.__init__(self, parent)

        self.scene = QGraphicsScene()
        self.view1 = QGraphicsView(self.scene, self)
        self.view2 = QGraphicsView(self.scene, self)

        self.view1.setFrameShape(QFrame.NoFrame)
        self.view2.setFrameShape(QFrame.NoFrame)

        widget = QWidget(self)
        layout = QGridLayout(widget)
        layout.addWidget(self.view1, 0, 0)
        layout.addWidget(self.view2, 0, 1)

        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)

        self.setCentralWidget(widget)

        self.scene.addLine(0, 0, 1000, 1000)

if __name__ == "__main__":
    app = QApplication(())
    window = Window()
    window.showMaximized()
    app.exec_()

撰写回答