Python listwidget单击项目按钮

问题描述

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

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

enter image description here

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

enter image description here

我该怎么做?

这是我的实际代码

MainWindow

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,**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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...