Программный щелчок по QGroupBox - PullRequest
1 голос
/ 07 мая 2020

Это продолжение этого моего вопроса: Сделать QGroupBox доступным для выбора и щелчком

Мой связанный с этим вопрос: как я могу программно щелкнуть по первому group при запуске?

Я попытался сделать это после реализации решения, предложенного в исходном вопросе, используя:

scrollLayout.itemAt(0).widget().click()

Однако это не сработало. Что мне не хватает?

1 Ответ

0 голосов
/ 07 мая 2020

Попробуйте:

from PyQt5 import QtWidgets, QtGui, QtCore


class GroupBox(QtWidgets.QGroupBox):                  
    clicked = QtCore.pyqtSignal(str, object)     

    def __init__(self, title):              
        super(GroupBox, self).__init__()
        self.title = title
        self.setTitle(self.title)

    def mousePressEvent(self, event):
        child = self.childAt(event.pos())
        if not child:
            child = self
        self.clicked.emit(self.title, child)            


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        w = QtWidgets.QWidget()
        layout = QtWidgets.QVBoxLayout()
        w.setLayout(layout)
        self.setCentralWidget(w)

        my_tree = QtWidgets.QTreeWidget()
        layout.addWidget(my_tree)

        alpha = QtWidgets.QTreeWidgetItem(my_tree, ['Alpha'])
        beta = QtWidgets.QTreeWidgetItem(my_tree, ['Beta'])

        alpha.addChild(QtWidgets.QTreeWidgetItem(['one']))
        alpha.addChild(QtWidgets.QTreeWidgetItem(['two']))

        beta.addChild(QtWidgets.QTreeWidgetItem(['first']))
        beta.addChild(QtWidgets.QTreeWidgetItem(['second']))

        my_tree.expandAll()
        alpha.child(0).setSelected(True)

        scroll = QtWidgets.QScrollArea()
        layout.addWidget(scroll)
        scrollLayout = QtWidgets.QVBoxLayout()

        scrollW = QtWidgets.QWidget()
        scroll.setWidget(scrollW)

        scrollW.setLayout(scrollLayout)
        scrollLayout.setAlignment(QtCore.Qt.AlignTop)

        scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        scroll.setWidgetResizable(True)

        for _ in range(5):
            fooGroup = GroupBox(f'GroupBox_{_}')                                     
            fooGroup.setObjectName(f'fooGroup {_}')
            fooGroup.clicked.connect(self.onFooGroupClick)                 
            fooLayout = QtWidgets.QVBoxLayout()
            fooGroup.setLayout(fooLayout)
            fooItem1 = QtWidgets.QLabel("fooItem1", objectName="fooItem1")
            fooItem1.setStyleSheet('background: #44ffff')
            fooItem2 = QtWidgets.QLabel("fooItem2", objectName="fooItem2")
            fooItem2.setStyleSheet('background: #ffff56;')
            fooItem3 = QtWidgets.QLabel("fooItem3", objectName="fooItem3")
            fooItem3.setStyleSheet('background: #ff42ff;')
            fooLayout.addWidget(fooItem1)
            fooLayout.addWidget(fooItem2)
            fooLayout.addWidget(fooItem3)
            scrollLayout.addWidget(fooGroup)

#        scrollLayout.itemAt(0).widget().click()                             # ---  
        _fooGroup = scrollLayout.itemAt(0).widget()                          # +++
        _fooGroup.clicked.emit('GroupBox_0', _fooGroup)                      # +++

    def onFooGroupClick(self, title, obj):                                
        print(f"Group: {title}; objectName=`{obj.objectName()}`") 


if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...