【问题标题】:Add a QWidget inside a QFrame在 QFrame 中添加 QWidget
【发布时间】:2021-02-04 12:54:48
【问题描述】:

我正在为图形用户界面使用 Python3 和 QtDesigner 开发桌面软件。

我的问题是:我正在尝试在 QFrame 上自动创建许多 QRadioButtons(RadioButtons 必须留在框架内 [as...children?])。

现在,我发现我只能在 Layout 中创建新的小部件(例如“MyLayout.addWidget(QRadioButton”)),并且无法执行“MyFrame.addWidget(QRadioButton)”之类的操作。我需要框架内的这些小部件,然后我可以使用“MyRB.move(X,Y)”将它们放置在正确的位置。

使用 QtDesigner 可以将许多小部件(如 RadioButtons)放置在具有“损坏布局”的框架中,因此我可以选择 X、Y 坐标,但我需要创建并放置可变数量的这些。

是否可以在 QFrame 中创建 Qwidget?

【问题讨论】:

  • 如果您通过代码创建这些小部件,只需使用父级作为参数创建实例 (radioButton = QRadioButton('text', MyFrame))。请注意,使用固定位置很少是一个好主意,因为内容可能会被父大小裁剪。此外,不要对实例名称使用大写(它应该是 myFrame,而不是 MyFrame)。

标签: python-3.x pyqt5 qt-designer qwidget qframe


【解决方案1】:

[编辑] 根据musicamante 的评论,我知道这是父母的问题。 我尝试在主窗口中插入一个标签和一个 RadioButton:

def __init__(self):
     super().__init__()
     uic.loadUi('DSS_GUI2.ui',self) # i load the GUI with QtDesigner
     LB1 = QLabel('MyLabel',self)
     RB1 = QRadioButton('MyRadioButton',self)
     ...

这个非常简单的例子工作正常,但是当我尝试通过函数添加标签时

def myFunction(self):
    LB1 = QLabel('MyLabel')
    LB1.setObjectName('LABEL_1')
    LB1.setParent(self.myFrame)

Widget 已插入但不可见,实际上添加此行是为了检查他的存在

    WidgetList = self.myFrame.findChildren(QLabel)
    
    for item in WidgetList:
        print(item.objectName())

我在控制台中看到标签在那里。 你知道它为什么不可见吗?

【讨论】:

    【解决方案2】:

    试试

    def myFunction(self):
    
        LB1 = self.sender()
        LB1.QLabel('MyLabel')
        LB1.setObjectName('LABEL_1')
        LB1.setParent(self.myFrame)
    

    您可以在 parent 中调用 self.myFunction()。

    如果你想传递标签,你可以:

    def myFunction(self, label):
    
        LB1 = self.sender()
        LB1.QLabel(label)
        LB1.setObjectName(label)
        LB1.setParent(self.myFrame)
    

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 2019-02-08
      • 2020-09-10
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      相关资源
      最近更新 更多