Добавьте QWidget внутри QFrame

Я разрабатываю настольное программное обеспечение, используя Python3 и QtDesigner для графического пользовательского интерфейса.

Моя проблема заключается в следующем: я пытаюсь автоматизировать создание многих QRadioButtons над QFrame (RadioButtons должны оставаться внутри фрейма [как... дети?]).

Теперь я вижу, что могу создавать новые виджеты только внутри макета (например, MyLayout.addWidget(QRadioButton)) и невозможно сделать что-то вроде MyFrame.addWidget(QRadioButton). Мне нужны эти виджеты внутри фрейма, потому что тогда я могу разместить их в правильном положении с помощью MyRB.move(X,Y).

С QtDesigner можно разместить множество виджетов (например, RadioButtons) в кадре с «сломанным макетом», поэтому я могу выбрать координаты X, Y, но мне нужно создать и разместить их переменное количество.

Можно ли создавать Qwidgets внутри QFrame?


person Michele V    schedule 21.10.2020    source источник
comment
Если вы создаете эти виджеты с помощью кода, просто создайте экземпляр с родителем в качестве аргумента (radioButton = QRadioButton('text', MyFrame)). Обратите внимание, что использование фиксированной позиции редко является хорошей идеей, так как содержимое может быть обрезано родительским размером. Кроме того, не используйте заглавные буквы для имен экземпляров (это должен быть myFrame, а не MyFrame).   -  person musicamante    schedule 21.10.2020


Ответы (1)


[РЕДАКТИРОВАТЬ] согласно комментарию musicamante, я понял, что это проблема родителей. Я попытался вставить Label и 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)

Виджет вставляется но его не видно, по сути добавление этой строчки для проверки его наличия

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

я вижу в консоли, что метка есть. Знаете, почему его не видно?

person Michele V    schedule 22.10.2020