0

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

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 中的一个项目,我收到多个 ('Hi) ,它将根据我在 ListWidget 中单击的次数显示 ('Hi')

知道可能是什么问题

4

1 回答 1

1

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

要解决此问题,请在方法或方法中建立两个信号连接test_2__init__

于 2018-02-18T22:48:41.870 回答