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)
首先,您应该知道我是 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)