QlistWidget 中的 itemClicked,函数执行超过 1 次

itemClicked in QlistWidget, function executed more than 1 time

我有一个奇怪的问题,希望有人能帮我解决

import os
from os import path
import sys
import pathlib
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import QMainWindow, QLabel, QGridLayout, QWidget, 
QWizard, QWizardPage, QLineEdit, \
                        QTabWidget, QApplication, 
QTextEdit,QToolTip,QPushButton,QMessageBox
from PyQt5.QtCore import QSize,pyqtSlot,pyqtProperty
from PyQt5.QtGui import QFont
from PyQt5.uic import loadUiType

app = QApplication(sys.argv)

if getattr(sys, 'frozen', False):
    # we are running in a bundle
    installPath = sys._MEIPASS
    print('we are running in a bundle')
else:
    # we are running in a normal Python environment
    installPath = os.path.dirname(os.path.abspath(__file__))
    print('we are running in a normal Python environment')

UI_File, _ = loadUiType(path.join(path.dirname(__file__), 'test.ui'))

class MainAPP(QTabWidget, UI_File):
    def __init__(self, parent=None):
        super(MainAPP, self).__init__(parent)
        self.setupUi(self)
        self.handle_buttons()
    def handle_buttons(self):
        self.pushButton.clicked.connect(self.test_2)
    def test_2(self):
        for i in range(10):
            self.listWidget.addItem(str('lklk'))
        self.listWidget.itemClicked.connect(self.test)
    def test(self):
        for i in range(10):
            self.listWidget_2.addItem(str('DDD'))
        self.listWidget_2.itemClicked.connect(self.test_3)
    def test_3(self):
            print ('hi')
def main():
    app = QApplication(sys.argv)
    main = MainAPP()
    main.show()
    app.exec_()

if __name__ == "__main__":
    main()

所以基本上,我有一个按钮,如果我点击它,它会在 listWidget 中显示一些数据,如果我点击 listWidget 中的任何项目,它会在 ListWidget_2 上显示其他数据,然后如果我点击 List_widget_2 中的项目然后它应该打印 ('Hi')

问题是,如果我在 ListWidget 中点击多次,然后点击 ListWidget_2 中的一个项目,我收到了不止一个 ('Hi) ,它会显示 ('Hi') 根据我在 Listwidget 中点击的次数

知道可能是什么问题

您只需要在信号和槽之间建立一次连接。当前,每次单击第一个列表小部件中的项目时,您都会建立额外的连接,这会导致您的方法打印 "hi" 为您建立的每个连接执行一次。

要解决此问题,请在 test_2 方法或 __init__ 方法

中制作 两个 信号连接