问题描述
首先,您应该知道我是Python的新手。我目前正在开发一个应用程序,以增加对这种语言的了解。
我有一个QListWidget,其中包含基于我创建的小部件的项目。此小部件包含一个按钮,例如一个用于更新,另一个按钮用于删除该项目。
所以我在执行此操作时遇到了麻烦。例如,如果我单击更新按钮,我想打开一个窗口并通过获取项目值来加载内容。
我该怎么做?
这是我的实际代码
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)