QtPython, неработающий сигнал нажатия кнопки

У меня проблема с моим кодом. Я искал ответы и использовал пример кода, но до сих пор не смог решить эту проблему. У меня есть таблица, в которой я хочу, чтобы слот активировался при нажатии строки таблицы. На данный момент я пытаюсь заставить кнопку реагировать на нажатие. Что я сделал не так? Заранее спасибо.

from PySide6.QtCore import *
from PySide6.QtWidgets import *
from PySide6.QtGui import *

class Window(QWidget):
    def __init__(self):
        # Initiate superclass
        QWidget.__init__(self)

        # Window-Layout setup
        layout = QGridLayout()
        self.setLayout(layout)

        # Table-Tab setup
        tab1 = TableTab(12, 3)
        tab2 = TableTab(12, 3)
        tab3 = TableTab(12, 3)

        tab1.addItem(0, 0, "Hej världen")

        # Tab-Widget setup
        tabWidget = QTabWidget()
        tabWidget.addTab(tab1.tRender(), "Available")
        tabWidget.addTab(tab2.tRender(), "Active")
        tabWidget.addTab(tab3.tRender(), "Completed")

        # Add Tab-Widget to layout
        layout.addWidget(tabWidget, 0, 0)

class Tab():
    def __init__(self):
        # Define layout
        self.layout = QGridLayout()

    def tRender(self):
        # Render tab
        self.tab = QWidget()
        self.tab.setLayout(self.layout)
        return self.tab

class TableTab(Tab):
    def __init__(self, rows, cols):
        # Initiate superclass
        Tab.__init__(self)

        # Setup table
        self.table = QTableWidget(rows, cols)
        self.table.setHorizontalHeaderLabels(["Job Overview", "Employer", "Payment", "Confirmed", "Date"])
        self.table.setEditTriggers(QTableWidget.NoEditTriggers)

        # Fix Headers
        header = self.table.horizontalHeader()
        for i in range(cols):
            if i == 0:
                header.setSectionResizeMode(0, QHeaderView.Stretch)
            else:
                header.setSectionResizeMode(i, QHeaderView.ResizeToContents)

        # Add widget to layout
        self.layout.addWidget(self.table, 0, 0)


    def addItem(self, row, col, text):
        # Create a cell widget
        self.btn = Button(text)
        self.table.setCellWidget(row, col, self.btn)

# THIS IS THE BUTTON CLASS
class Button(QPushButton):
    def __init__(self, text):
        QPushButton.__init__(self)
        self.setFlat(1)
        self.setText(text)
        self.setStyleSheet("QPushButton { text-align: left; }")
        
        # THIS IS THE CLICK CONNECT
        self.clicked.connect(print("Hello World!"))

if __name__ == "__main__":
    
    app = QApplication()
    screen = Window()
    screen.setWindowTitle("BlaBlaNet - Freelancer")
    screen.setFixedSize(800, 600)
    screen.show()
    app.exec_()


person Forsarna_    schedule 02.03.2021    source источник
comment
connect ожидает callable, но print() является вызовом функции, которая возвращает None. Используйте self.clicked.connect(lambda: print("Hello World!")) или создайте метод для экземпляра (def someFunction(self): #...) и подключитесь к этому методу (self.clicked.connect(self.someFunction)). В любом случае, запуск программ в терминале/приглашении обычно является хорошей привычкой, так как позволяет получить полную трассировку ошибок, чего IDE обычно не могут показать. Помечен как дубликат clicked.connect() Error   -  person musicamante    schedule 02.03.2021
comment
Также обратите внимание, что создание базовых подклассов объектов python, предназначенных для использования в объектах Qt, обычно не является хорошей идеей, поскольку оно не допускает правильных переопределений, может привести к неожиданному поведению или ошибкам, которые трудно отследить, и на самом деле не обеспечивает любую выгоду. Если вы используете QWidget, то подкласс от QWidget. Наконец, layout является существующим свойством всех подклассов QWidget, и вы не должен перезаписывать его.   -  person musicamante    schedule 02.03.2021