У меня проблема с моим кодом. Я искал ответы и использовал пример кода, но до сих пор не смог решить эту проблему. У меня есть таблица, в которой я хочу, чтобы слот активировался при нажатии строки таблицы. На данный момент я пытаюсь заставить кнопку реагировать на нажатие. Что я сделал не так? Заранее спасибо.
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_()
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.2021layout
является существующим свойством всех подклассов QWidget, и вы не должен перезаписывать его. - person musicamante   schedule 02.03.2021