PyQt5 TabWidget选项卡BarClicked TypeError:本机Qt信号不可调用 [英] PyQt5 TabWidget tabBarClicked TypeError: native Qt signal is not callable

查看:0
本文介绍了PyQt5 TabWidget选项卡BarClicked TypeError:本机Qt信号不可调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试用PyQt5制作一个用户界面。如果我单击第5个索引选项卡,则将调用userSettings()函数。但程序引发此错误:

self.tabWidget.tabBarClicked(5).connect(self.userSettings())
TypeError: native Qt signal is not callable

我如何修复它?

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)

推荐答案

代码中有两个问题:

  1. Signals文档中显示的参数是从它们所连接的函数接收的参数;
  2. 信号连接需要对可调用对象的引用,而您正在调用所需的函数(带括号),这将在函数返回None时引发TypeError;

更改为:

    self.tabWidget.tabBarClicked.connect(self.userSettings)

然后:

def userSettings(self, tabIndex):
    if tabIndex != 5:
        return
    # ...

请注意,您应该连接到currentChanged信号,而不是tabBarClicked信号,因为即使所单击的选项卡已经是当前选项卡,该信号也会被触发。

这篇关于PyQt5 TabWidget选项卡BarClicked TypeError:本机Qt信号不可调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆