Аргументы методов класса

Есть код:

class ApplicationMain(QtWidgets.QMainWindow, ClientApp.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.cancel.clicked.connect(self.appExit)
        self.select.clicked.connect(self.selectModFolder)
        self.selectGame.clicked.connect(self.selectGameFolder)
        self.modsfile.itemDoubleClicked.connect(self.moveMods(1))
    def moveMods(self, fromMethod):
        a = self.modsfile.currentRow()
        directory = self.urlMods.text()
        i = os.listdir(directory)
        i.reverse()
        if fromMethod == 1:
           #Что-то

Я хочу чтобы при выполнении вот этого:

self.modsfile.itemDoubleClicked.connect(self.moveMods(0))

Вызывался метод с аргументом fromMethod = 1, но выскакивает ошибка, по причине количества aргументов. Как можно исправить?


Ответы (1 шт):

Автор решения: S. Nick

Пожалуйста, всегда предоставляйте минимально-воспроизводимый пример, который демонстрирует проблему.

void QListWidget::itemDoubleClicked(QListWidgetItem *item) [signal]

Этот сигнал испускается указанным элементом/item при двойном щелчке кнопкой мыши на элементе/iteme в виджете.

Больше https://doc.qt.io/qt-5/qlistwidget.html#itemDoubleClicked

Т.е. этот сигнал по умолчанию передает item, если вы еще что-то хотите передать, то вам нужна lambda

Попробуйте так:

import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.Qt import *


class ApplicationMain(QtWidgets.QMainWindow): #, ClientApp.Ui_MainWindow):
    def __init__(self):
        super().__init__()
#        self.setupUi(self)
        
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget) 
        
#        self.cancel.clicked.connect(self.appExit)
#        self.select.clicked.connect(self.selectModFolder)
#        self.selectGame.clicked.connect(self.selectGameFolder)
        
        self.modsfile = QListWidget()
        self.modsfile.addItems(['item 1', 'item 2', 'item 3', 'item 4'])
        
        self.modsfile.itemDoubleClicked.connect(                           # +++
            lambda item, fromMethod=1: self.moveMods(item, fromMethod))    # +++
        
        self.layout = QGridLayout(self.centralWidget)
        self.layout.addWidget(self.modsfile, 0, 0, 1, 1)  
        
    def moveMods(self, item, fromMethod):                                  # +++
        print(f'item.text = {item.text()}') #
    
        a = self.modsfile.currentRow()
#        directory = self.urlMods.text()
#        i = os.listdir(directory)
#        i.reverse()
        if fromMethod == 1:
           #Что-то
           print(f'fromMethod = {fromMethod} --> currentRow = {a}') #


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = ApplicationMain()
    window.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка