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__
方法
中制作 两个 信号连接
我有一个奇怪的问题,希望有人能帮我解决
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__
方法