在QT for Python中使用QFrames?

问题描述 投票:-1回答:1

如何将对象放置在QFrame的范围内,因为我无法理解它。我已经阅读了关于 https:/doc.qt.ioqtforpythonPySide2QtWidgetsQFrame.html。 但对我来说,它只是没有下沉。我也看了各种代码片段,但似乎没有任何东西能满足我的要求。

当我尝试调用QPushButton或QFrame的方法时,似乎没有任何选项可以让它们相互交互。

from PySide2.QtWidgets import *
import sys

class ButtonTest(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.button1 = QPushButton("Button 1")
        self.button2 = QPushButton("Button 2")

        self.myframe = QFrame()
        self.myframe.setFrameShape(QFrame.StyledPanel)
        self.myframe.setFrameShadow(QFrame.Plain)
        self.myframe.setLineWidth(3)

        self.buttonlayout = QVBoxLayout(self.myframe)
        self.buttonlayout.addWidget(self.button1)
        self.buttonlayout.addWidget(self.button2)

        self.setLayout(self.buttonlayout)


app = QApplication(sys.argv)

mainwindow = ButtonTest()
mainwindow.show()

sys.exit(app.exec_())

它们在构建布局时将QFrame作为一个参数传入。这样编译起来很好,但框架却不见踪影。

python python-3.x pyside2
1个回答
3
投票

问题很简单。布局只能在widget中建立,为了更好的理解,你必须知道这一点。

lay = QXLayout(foowidet)

等于:

lay = QXLayout()
foowidget.setLayout(lay)

在你的代码中,你首先指出buttonlayout处理myframe的子widgets(self.buttonlayout = QVBoxLayout(self.myframe)),但是你已经将它设置为处理窗口的子代(self.addWidget(self.myframe).

解决办法是通过布局建立QFrame。

class ButtonTest(QWidget):
    def __init__(self):
        super(ButtonTest, self).__init__()

        self.button1 = QPushButton("Button 1")
        self.button2 = QPushButton("Button 2")

        self.myframe = QFrame()
        self.myframe.setFrameShape(QFrame.StyledPanel)
        self.myframe.setFrameShadow(QFrame.Plain)
        self.myframe.setLineWidth(3)

        buttonlayout = QVBoxLayout(self.myframe)
        buttonlayout.addWidget(self.button1)
        buttonlayout.addWidget(self.button2)

        lay = QVBoxLayout(self)
        lay.addWidget(self.myframe)
© www.soinside.com 2019 - 2024. All rights reserved.