Python listwidget 点击项目按钮

Python listwidget click item button

首先,您应该知道我是 Python 的新手。我目前正在开发一个应用程序来增加我对这门语言的了解。

我有一个 QListWidget,其中包含基于我创建的小部件的项目。此小部件包含按钮,例如一个用于更新或另一个用于删除项目。

所以我在执行此操作时遇到了麻烦。例如,如果我单击更新按钮,我想打开一个 window 并通过获取项目值来加载内容。

我该怎么做?

这是我的实际代码

主窗口

from PyQt5 import QtGui, QtWidgets, QtCore
from PyQt5.QtCore import QSize
from PyQt5.QtWidgets import QMainWindow, QHBoxLayout

from CustomWidgets.fb_line import fb_line
from Data.data_saver import data_saver
from MainWindows import Ui_MainWindow
from Windows.Ajout import Ajout
from Windows.Parametres import Parametres
from Windows.custom_fb_line import custom_fb_line


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.c_fb_l = custom_fb_line()
        self.parametres = Parametres()
        self.ajout = Ajout()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.btn_parametre.clicked.connect(self.button_open_parametres)
        self.ui.btn_ajouter.clicked.connect(self.button_open_ajout)
        self.ui.btn_annuler.clicked.connect(self.button_annuler)
        self.ui.btn_fermer.clicked.connect(self.close)
        self.addLines()

    def button_open_parametres(self):
        self.parametres.show()

    def button_open_ajout(self):
        self.ajout.show()

    def button_annuler(self):
        self.ui.lw_dossier.clear()
        self.addLines()

    def addLines(self):
        fbs = ds.read_data(data)
        listWidget = self.ui.lw_dossier
        listWidget.reset()

        for fb in fbs:
            item_widget = fb_line(fb)
            item = QtWidgets.QListWidgetItem(listWidget)
            item.setSizeHint(QSize(0, 50))
            listWidget.addItem(item)
            listWidget.setItemWidget(item, item_widget)

            listWidget.show()


data = "./Data/data.pkl"
ds = data_saver()

小部件:

from PyQt5 import QtWidgets
from Objects.enum import enum
from custom_fb_line import Ui_custom_fb_line


class fb_line(QtWidgets.QWidget):
    def __init__(self, fb, *args, **kwargs):
        QtWidgets.QWidget.__init__(self, *args, **kwargs)
        self.ui = Ui_custom_fb_line()
        self.ui.setupUi(self)
        self.ui.le_source.setText(fb.dossier_source)
        self.ui.le_cible.setText(fb.dossier_cible)
        self.ui.le_cron.setText("tous les " + str(fb.cron.number) + " " + enum().get_types()[fb.cron.type])
        self.ui.btn_delete.clicked.connect(self.delete)
        self.ui.btn_modifier.clicked.connect(self.modifier)
        self.ui.btn_demarrer.clicked.connect(self.demarrer)

    def delete(self):
        print('delete ')

    def modifier(self):
        print('modifier')

    def demarrer(self):
        print('démarrer')

所以打印确实显示在控制台中,但我不知道如何实现按钮单击以更新或删除项目。

没关系,我找到了一个方法,其实很简单。作为 python 的新手,我不知道如何将参数传递给插入按钮的方法。以下是可能遇到相同问题的任何人的操作方法

self.ui.btn_delete.clicked.connect(lambda: self.delete(fb))

    def delete(self, fb):
        print('delete ')
        print(fb.dossier_source)