При добавлении элементов в QListWidget я хочу включить или отключить действие в зависимости от того, есть ли элементы в QListWidget. Есть ли что-то в списке listWidget.itemChanged.connect(self.checkListLength)
, кроме изменения количества элементов в QlistWidget, которое я мог бы использовать? Обычно после каждого изменения в виджете я просто выполняю проверку, но многие различные источники будут ее менять, и было бы больше смысла просто слушать изменение.
Я перепробовал каждое соединение, которое смог найти, чтобы увидеть, вернет ли оно желаемый результат, а это не так.
Вот пример, который компилируется, но не включает действие Rename Selection
. Мы импортируем имена файлов в QListWidget. В этом примере мы могли бы просто включить его после использования открытой папки, но для моего кода это будет не так просто.
import sys
from os import listdir
from os.path import isfile, join
from PyQt5.QtWidgets import (
QMainWindow, QAction, QHBoxLayout, QWidget, QListWidget,
QListWidgetItem, QAbstractItemView, QApplication, QDialog, qApp, QToolBar, QFileDialog
)
from PyQt5.QtGui import QIcon
from PyQt5 import QtCore
class MainGui(QMainWindow):
def __init__(self):
super().__init__()
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)
#Import Folder
self.importAct = QAction(QIcon('img/folder.svg'), 'Open Folder', self)
self.importAct.setShortcut('Ctrl+N')
self.importAct.triggered.connect(self.getFolder)
#Rename Button
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.LeftToolBarArea, 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):
self.ImportFolder = QFileDialog.getExistingDirectory(None, "Select Directory")
self.getFilesInDir(self.ImportFolder)
def getFilesInDir(self, mypath):
f = []
files = [f for f in listdir(mypath) if isfile(join(mypath, f))]
if files:
self.listWidget.addItems(files)
if __name__ == '__main__':
app = QApplication(sys.argv)
gui = MainGui()
sys.exit(app.exec_())