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

时间:2018-02-18 22:11:16

标签: python pyqt5 qlistwidget qlistwidgetitem

我有一个奇怪的问题,希望有人能为我清除它

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中的项目然后它应该打印('嗨')

问题是,如果我在ListWidget中多次单击然后单击ListWidget_2中的项目,我收到多个('嗨),它将根据我点击的点击次数显示('嗨') Listwidget

任何想法可能是什么问题

1 个答案:

答案 0 :(得分:0)

您只需要在信号和插槽之间建立一次连接。目前,每次单击第一个列表小部件中的项目时,您都会进行其他连接,这会导致您的方法打印“hi”,对您所做的每个连接执行一次。

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

中设置信号连接的