如何将对象放置在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作为一个参数传入。这样编译起来很好,但框架却不见踪影。
问题很简单。布局只能在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)