Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. Impossible to connect slots in TabWidget
Forum Update on Tuesday, May 27th 2025

Impossible to connect slots in TabWidget

Scheduled Pinned Locked Moved Solved Qt for Python
3 Posts 2 Posters 537 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    AdamF42
    wrote on last edited by AdamF42
    #1

    Hi, I'm trying to develop a simple application with a MainWindows containing a TabWidget made with three pages. In one of them i setted up some buttons but I'm not able to trigger the slot functions.

    // main.py
    from PyQt5.QtGui import QIcon
    from PyQt5.QtWidgets import (QApplication, QWidget, QMainWindow, QTabWidget)
    from Views.PagesImplementation import ClassifyPageUIClass, MainWindowUIClass
    import sys
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
    
        ClassifyPage = QWidget()
        ui = ClassifyPageUIClass()
        ui.setupUi(ClassifyPage)
    
        tabsSubPage = QTabWidget()
        tabsSubPage.addTab(ClassifyPage, QIcon("zoom.png"), "Classify")
    
        MainWindow = QMainWindow()
        ui = MainWindowUIClass()
        ui.setupUi(MainWindow)
        MainWindow.setCentralWidget(tabsSubPage)
        MainWindow.show()
    
        sys.exit(app.exec_())
    
    //ClassifyPage (generated from QtDesigner)
    from PyQt5 import QtCore, QtWidgets
    from PyQt5.QtCore import QObject, pyqtSlot
    
    
    class Ui_ClassifyPage(QObject):
        def setupUi(self, ClassifyPage):
            ClassifyPage.setObjectName("ClassifyPage")
            ClassifyPage.resize(500, 480)
            self.widget = QtWidgets.QWidget(ClassifyPage)
            self.widget.setGeometry(QtCore.QRect(40, 21, 436, 391))
            self.widget.setObjectName("widget")
            self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
            self.verticalLayout.setContentsMargins(0, 0, 0, 0)
            self.verticalLayout.setObjectName("verticalLayout")
            self.getFileGroupBox = QtWidgets.QGroupBox(self.widget)
            self.getFileGroupBox.setObjectName("getFileGroupBox")
            self.gridLayout = QtWidgets.QGridLayout(self.getFileGroupBox)
            self.gridLayout.setObjectName("gridLayout")
            self.horizontalLayout = QtWidgets.QHBoxLayout()
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.listView = QtWidgets.QListView(self.getFileGroupBox)
            self.listView.setObjectName("listView")
            self.horizontalLayout.addWidget(self.listView)
            self.browsePushbutton = QtWidgets.QPushButton(self.getFileGroupBox)
            self.browsePushbutton.setEnabled(True)
            self.browsePushbutton.setObjectName("browsePushbutton")
            self.horizontalLayout.addWidget(self.browsePushbutton, 0, QtCore.Qt.AlignRight|QtCore.Qt.AlignTop)
            self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
            self.verticalLayout.addWidget(self.getFileGroupBox)
            spacerItem = QtWidgets.QSpacerItem(448, 118, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
            self.verticalLayout.addItem(spacerItem)
            self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
            self.horizontalLayout_2.setSpacing(10)
            self.horizontalLayout_2.setObjectName("horizontalLayout_2")
            self.cancelPushButton = QtWidgets.QPushButton(self.widget)
            self.cancelPushButton.setObjectName("cancelPushButton")
            self.horizontalLayout_2.addWidget(self.cancelPushButton)
            spacerItem1 = QtWidgets.QSpacerItem(193, 27, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.horizontalLayout_2.addItem(spacerItem1)
            self.classifyPushButton = QtWidgets.QPushButton(self.widget)
            self.classifyPushButton.setObjectName("classifyPushButton")
            self.horizontalLayout_2.addWidget(self.classifyPushButton)
            self.verticalLayout.addLayout(self.horizontalLayout_2)
    
            self.retranslateUi(ClassifyPage)
            self.browsePushbutton.clicked.connect(self.pickDatasetSlot)
            self.classifyPushButton.clicked.connect(self.classifySlot)
            self.cancelPushButton.clicked.connect(self.cancelSlot)
            QtCore.QMetaObject.connectSlotsByName(ClassifyPage)
    
        def retranslateUi(self, ClassifyPage):
            _translate = QtCore.QCoreApplication.translate
            ClassifyPage.setWindowTitle(_translate("ClassifyPage", "Form"))
            self.getFileGroupBox.setTitle(_translate("ClassifyPage", "Select a file or folder to classify"))
            self.browsePushbutton.setText(_translate("ClassifyPage", "Browse"))
            self.cancelPushButton.setText(_translate("ClassifyPage", "Cancel"))
            self.classifyPushButton.setText(_translate("ClassifyPage", "Classify"))
    
        @pyqtSlot( )
        def pickDatasetSlot(self):
            pass
    
        @pyqtSlot( )
        def classifySlot(self):
            pass
    
        @pyqtSlot( )
        def cancelSlot(self):
            pass
    
    // ClassifyPageClass
    class ClassifyPageUIClass(Ui_ClassifyPage):
        def __init__(self):
            '''Initialize the super class
            '''
            super().__init__()
    
        def setupUi(self, MW):
            ''' Setup the UI of the super class, and add here code
            that relates to the way we want our UI to operate.
            '''
            super().setupUi(MW)
    
        def pickDatasetSlot(self):
            print("dataset")
    
        def classifySlot(self):
            print("classify")
    
        def cancelSlot(self):
            print("cancel")
    

    By running just the ClassifyPageClass instance the slots works simply well. What am I doing wrong?

    1 Reply Last reply
    0
    • consumererikC Offline
      consumererikC Offline
      consumererik
      wrote on last edited by
      #2

      I dont think you need to use @pyqtSlot decorator.
      At least I never do.

      1 Reply Last reply
      0
      • A Offline
        A Offline
        AdamF42
        wrote on last edited by
        #3

        I found out the error and I feel so stupid. I used the same name (ui) for two variables in

            ClassifyPage = QWidget()
            ui = ClassifyPageUIClass()
            ui.setupUi(ClassifyPage)
        

        and

            MainWindow = QMainWindow()
            ui = MainWindowUIClass()
            ui.setupUi(MainWindow)
        

        so the the slots connects of my QTabWidget were overwrighted.

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved