Pyqt GroupBox 父子关系

1 投票
1 回答
6566 浏览
提问于 2025-04-15 14:08

在Python和Pyqt中,我有一个简单的类,它创建了一个Label类和一个GroupBox类。

根据文档,创建Label时把GroupBox传给它,应该会让GroupBox成为Label的父级。不过,我好像漏掉了什么简单的东西。当我创建GroupBox时没问题,但当我创建Label时,它看起来有点变形(或者可能是在GroupBox后面?)

谢谢 -

from PyQt4.QtCore import * 
from PyQt4.QtGui import *
import sys


class FileBrowser(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setGeometry(0, 0, 920, 780)
        self.initClasses()

    def initClasses(self):
        # GroupBox
        self.groupBox1 = GroupBox(self, QRect(20, 10, 191, 131),  'Shot Info')

        # Label
        self.labelGroup1_ShotInfo = Label(self, QRect(10, 26, 52, 15),  'Film')


class GroupBox(QWidget): 
    def __init__(self, parent,  geo,  title): 
        QWidget.__init__(self, parent)
        obj = QGroupBox(parent)
        obj.setGeometry(geo)
        obj.setTitle(title)

class Label(QWidget): 
    def __init__(self, parent,  geo,  text): 
        QWidget.__init__(self, parent)
        obj = QLabel(parent)
        obj.setGeometry(geo)
        obj.setText(text)



def main(): 
    app = QApplication(sys.argv) 
    w = FileBrowser() 
    w.show() 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main()

1 个回答

2

问题在于你没有使用布局。因为没有布局,所以两个小部件(widget)叠在了一起。具体情况还要看你想做什么,但下面这个例子应该能帮到你:

class FileBrowser(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setGeometry(0, 0, 920, 780)
        self.initClasses()
        # changes
        layout = QVBoxLayout(self) # create layout out
        layout.addWidget(self.groupBox1) # add widget
        layout.addWidget(self.labelGroup1_ShotInfo) # add widget
        # set my layout to make sure contents are correctly rendered
        self.setLayout(layout) 

    def initClasses(self):
        # GroupBox
        self.groupBox1 = GroupBox(self, QRect(20, 10, 191, 131),  'Shot Info')

        # Label
        self.labelGroup1_ShotInfo = Label(self, QRect(10, 26, 52, 15),  'Film')

上面的例子使用了一个垂直布局,这样就解决了这个问题。

撰写回答