Advertisements
I am trying to making a user interface with PyQt5. If i click the 5th index tab userSettings() function will call. But program raises this error:
self.tabWidget.tabBarClicked(5).connect(self.userSettings())
TypeError: native Qt signal is not callable
How can i fix it?
import sys
import PyQt5.QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QTabBar, QWidget
from PyQt5.QtWidgets import QMessageBox
from numpy import *
from alfa_gui import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
QMainWindow.__init__(self)
self.setupUi(self)
self.tabWidget.tabBarClicked(5).connect(self.userSettings())
def userSettings(self):
if self.lineEdit.text() == "cogal" and self.lineEdit_2.text() == "cogal":
print("Success!")
else:
msg = QMessageBox()
msg.setWindowTitle("Hatalı Giriş!")
msg.setText("Wrong Password Or Username")
x = msg.exec_()
msg.setIcon(QMessageBox.Critical)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.setWindowTitle('ALFA')
window.show()
exit_code = app.exec_()
sys.exit(exit_code)
>Solution :
There are two problems in your code:
- the arguments shown in the signals documentation are the arguments received from the functions they’re connected to;
- signal connections require the reference to a callable, while you’re calling the desired function (with the parentheses), which would raise a TypeError as the function returns
None
;
Change to:
self.tabWidget.tabBarClicked.connect(self.userSettings)
And then:
def userSettings(self, tabIndex):
if tabIndex != 5:
return
# ...
Note that you should connect to the currentChanged
signal, not the tabBarClicked
one, as that will be triggered anyway even if the clicked tab is already the current one.