Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在QListWidget添加或删除内容时触发事件_Python_Python 3.x_Pyqt_Pyqt5_Qlistwidget - Fatal编程技术网

Python 如何在QListWidget添加或删除内容时触发事件

Python 如何在QListWidget添加或删除内容时触发事件,python,python-3.x,pyqt,pyqt5,qlistwidget,Python,Python 3.x,Pyqt,Pyqt5,Qlistwidget,在向QListWidget添加元素时,我希望根据QListWidget中是否有元素来启用或禁用操作。除了QlistWidget中我可以使用的元素数量的变化之外,是否还有列表listWidget.itemChanged.connect(self.checkListLength)中的内容?通常情况下,每次修改小部件后,我都会进行检查,但许多不同的来源都会对其进行修改,只需倾听修改就更有意义了 我已经尝试了我能找到的每一个连接,看看它是否会返回期望的结果,但似乎没有 下面是一个编译但不启用操作重命名选

在向QListWidget添加元素时,我希望根据QListWidget中是否有元素来启用或禁用操作。除了QlistWidget中我可以使用的元素数量的变化之外,是否还有列表
listWidget.itemChanged.connect(self.checkListLength)
中的内容?通常情况下,每次修改小部件后,我都会进行检查,但许多不同的来源都会对其进行修改,只需倾听修改就更有意义了

我已经尝试了我能找到的每一个连接,看看它是否会返回期望的结果,但似乎没有

下面是一个编译但不启用操作
重命名选择
的示例。我们正在将文件名导入QListWidget。在本例中,我们可以在使用“打开”文件夹后启用它,但对于我的代码来说,这并不容易

导入系统 从操作系统导入listdir 从os.path导入isfile,加入 从PyQt5.QtWidgets导入( QMainWindow、QAction、QHBoxLayout、QWidget、QListWidget、, QListWidgetItem、QAbstractItemView、QApplication、QDialog、qApp、QToolBar、QFileDialog ) 从PyQt5.QtGui导入QIcon 从PyQt5导入QtCore 类MainGui(QMainWindow): 定义初始化(自): super()。\uuuu init\uuuuu() self.mainWidget=QWidget() self.setCentralWidget(self.mainWidget) self.initUI() def initUI(self): #TopIcon self.exitAct=QAction(QIcon('img/x-square.svg'),'Exit',self) self.exitAct.setShortcut('Ctrl+Q') self.exitAct.triggered.connect(qApp.quit) #导入文件夹 self.importAct=QAction(QIcon('img/folder.svg'),'openfolder',self) self.importAct.setShortcut('Ctrl+N') self.importAct.triggered.connect(self.getFolder) #重命名按钮 self.renameAct=QAction(QIcon('img/edit.svg'),'Rename Selection',self) self.renameAct.setShortcut('Ctrl+R') self.renameAct.setEnabled(False) self.toolbar=QToolBar('toolbar') self.addToolBar(QtCore.Qt.leftToolbar区域,self.toolbar) self.toolbar.addAction(self.exitAct) self.toolbar.addSeparator() self.toolbar.addAction(self.importAct) self.toolbar.addAction(self.renameAct) self.hbox=QHBoxLayout() self.listWidget=QListWidget() self.listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection) self.listWidget.setGeometry(QtCore.QRect(10,10,211,291)) self.hbox.addWidget(self.listWidget) self.mainWidget.setLayout(self.hbox) self.show() def getFolder(自我): self.ImportFolder=QFileDialog.getExistingDirectory(无,“选择目录”) self.getFilesInDir(self.ImportFolder) def GetFileIndir(self,mypath): f=[] files=[f表示listdir(mypath)中的f,如果isfile(join(mypath,f))] 如果文件: self.listWidget.addItems(文件) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=QApplication(sys.argv) gui=MainGui() sys.exit(app.exec_())
如果您想知道某个项目是添加到QListWidget还是删除到QListWidget,则必须通过内部模型来完成,该模型分别具有
行插入信号和
行删除信号

import sys
from os import listdir
from os.path import isfile, join
from PyQt5 import QtCore, QtGui, QtWidgets


class MainGui(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.mainWidget = QtWidgets.QWidget()
        self.setCentralWidget(self.mainWidget)
        self.initUI()

    def initUI(self):
        # TopIcon
        self.exitAct = QtWidgets.QAction(
            QtGui.QIcon("img/x-square.svg"), "Exit", self
        )
        self.exitAct.setShortcut("Ctrl+Q")
        self.exitAct.triggered.connect(QtWidgets.qApp.quit)

        # Import Folder
        self.importAct = QtWidgets.QAction(
            QtGui.QIcon("img/folder.svg"), "Open Folder", self
        )
        self.importAct.setShortcut("Ctrl+N")
        self.importAct.triggered.connect(self.getFolder)

        # Rename Button
        self.renameAct = QtWidgets.QAction(
            QtGui.QIcon("img/edit.svg"), "Rename Selection", self
        )
        self.renameAct.setShortcut("Ctrl+R")
        self.renameAct.setEnabled(False)

        self.toolbar = QtWidgets.QToolBar("ToolBar")
        self.addToolBar(QtCore.Qt.LeftToolBarArea, self.toolbar)
        self.toolbar.addAction(self.exitAct)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.importAct)
        self.toolbar.addAction(self.renameAct)
        hbox = QtWidgets.QHBoxLayout(self.mainWidget)
        self.listWidget = QtWidgets.QListWidget()
        self.listWidget.setSelectionMode(
            QtWidgets.QAbstractItemView.ExtendedSelection
        )
        self.listWidget.model().rowsInserted.connect(self.on_rowsInserted)
        self.listWidget.model().rowsRemoved.connect(self.on_rowsRemoved)
        hbox.addWidget(self.listWidget)
        self.show()

    @QtCore.pyqtSlot(QtCore.QModelIndex, int, int)
    def on_rowsInserted(self, parent, first, last):
        print("Insert:", parent, first, last)

    @QtCore.pyqtSlot(QtCore.QModelIndex, int, int)
    def on_rowsRemoved(self, parent, first, last):
        print("Remove:", parent, first, last)

    @QtCore.pyqtSlot()
    def getFolder(self):
        importFolder = QtWidgets.QFileDialog.getExistingDirectory(
            None, "Select Directory"
        )
        self.getFilesInDir(importFolder)

    def getFilesInDir(self, mypath):
        files = [f for f in listdir(mypath) if isfile(join(mypath, f))]
        if files:
            self.listWidget.addItems(files)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    gui = MainGui()
    sys.exit(app.exec_())

我很抱歉回答了我自己的问题,但我明白了,不想让任何人上吊

您需要引用QListWidget的模型才能执行此操作:

self.lwModel=self.listWidget.model()
self.lwModel.rowsInserted.connect(self.checkListLength)#任何时候添加元素都可以运行函数
self.lwModel.rowsRemoved.connect(self.checkListLength)#在删除元素时运行函数

我希望这能帮助任何有同样问题的人。

真的帮助了我的项目!出于某种原因,每当我尝试在每次插入内容时滚动到列表小部件的底部时,它都无法工作。不过,使用这种方法很有魅力!荣誉