在QT for Python中使用Qframe?

2024-05-19 15:53:53 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将对象放置在QFrame的范围内,因为我的头无法绕过它。我已经阅读了关于https://doc.qt.io/qtforpython/PySide2/QtWidgets/QFrame.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作为参数传入。这编译得很好,但框架却看不到


Tags: importselfinitsysbuttonpyside2qwidgetqtwidgets
1条回答
网友
1楼 · 发布于 2024-05-19 15:53:53

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

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)

相关问题 更多 >