在 QT for Python 中使用 QFrames?

Posted

技术标签:

【中文标题】在 QT for Python 中使用 QFrames?【英文标题】:Using QFrames in QT for Python? 【发布时间】:2020-05-26 17:56:19 【问题描述】:

如何将对象放置在 QFrame 的范围内,因为我无法理解它。我已经阅读了https://doc.qt.io/qtforpython/PySide2/QtWidgets/QFrame.html 上的文档,但它对我来说并没有深入人心。我还查看了各种代码 sn-ps,但似乎没有做我想要的。

当我尝试调用 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 作为参数传入。这编译得很好,但框架无处可见。

【问题讨论】:

【参考方案1】:

问题很简单:布局只能在一个小部件中建立,为了更好地理解你必须知道:

lay = QXLayout(foowidet)

等于:

lay = QXLayout()
foowidget.setLayout(lay)

在您的代码中,您首先指出 buttonlayout 处理 myframe 的子小部件(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)

【讨论】:

非常感谢!这是一个如此清晰和简单的解释。

以上是关于在 QT for Python 中使用 QFrames?的主要内容,如果未能解决你的问题,请参考以下文章

在 QT for Python 中使用 QFrames?

Qt for python 实战总目录

Qt for python 实战总目录

Qt for python 实战总目录

Qt for python 的信号槽机制使用

PySide2(Qt for Python)在 Linux 上的 Qt Designer 安装在哪里?