在 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?的主要内容,如果未能解决你的问题,请参考以下文章