ユーザーの設定用のセカンダリウィンドウを作成したいので、クラスQMainWindowで、次のようにオブジェクト設定を呼び出します。
self.settingsAction = QtGui.QAction('Préférences', self)
self.settingsAction.triggered.connect(lambda: Settings(self))
次に、Settingsクラスを作成します。
class Settings():
""" Méthode pour effectuer les réglages du programme
par l'utilisateur """
def __init__(self, parent):
#TODO: faire de cette fenêtre l'enfant de la fenêtre principale
#On crée une fenêtre secondaire
self.parent = parent
self.initUI()
self.connexion()
self.etablirSlots()
def connexion(self):
self.parent.options.beginGroup("Watching")
pathes = self.parent.options.allKeys()
if pathes:
for each_key in pathes:
self.list_pathes.addItem(self.parent.options.value(each_key))
self.parent.options.endGroup()
def etablirSlots(self):
self.add_directory_button.clicked.connect(self.addPath)
self.rm_directory_button.clicked.connect(self.removePath)
def initUI(self):
self.parent.fen_settings = QtGui.QWidget()
self.parent.fen_settings.setWindowTitle('Préférences')
#http://cyp1973.blogspot.fr/2009/05/qt-resource-file.html
#On crée un QListWidget pr présenter les pathes
self.list_pathes = QtGui.QListWidget()
#On crée un titre pour la zone des pathes à surveiller
label_directories = QtGui.QLabel("Dossiers surveillés :")
#On crée les boutons d'ajout et de retrait d'un path
self.add_directory_button = QtGui.QPushButton("Ajouter")
self.rm_directory_button = QtGui.QPushButton("Enlever")
#On crée une grille pr gérer la disposition des widgets
grid_settings = QtGui.QGridLayout()
grid_settings.addWidget(label_directories, 0, 0, 1, 1)
grid_settings.addWidget(self.list_pathes, 1, 0, 2, 1)
grid_settings.addWidget(self.add_directory_button, 1, 1, 1, 1)
grid_settings.addWidget(self.rm_directory_button, 2, 1, 1, 1)
self.parent.fen_settings.setLayout(grid_settings)
self.parent.fen_settings.show()
def removePath(self):
""" Slot pour enlever un path à surveiller
de la conf """
print("coucou")
#try:
path = self.list_pathes.selectedItems()[0].text()
print(path)
#http://stackoverflow.com/questions/7484699/
#pyqt4-remove-item-widget-from-qlistwidget
#On efface le path de la liste visible
item = self.list_pathes.takeItem(self.list_pathes.currentRow())
del item
#except IndexError:
#print("Aucun path sélectionné")
#pass
def addPath(self):
""" Slot pour ajouter un path à surveiller à la conf """
#TODO: vérifier que le path à ajouter n'est pas déjà dans la liste
#On crée une boite de dialogue pr choisir le path à ajouter
#et on ajoute le path à la liste visible
path = QtGui.QFileDialog.getExistingDirectory(self.parent.fen_settings, 'Open file', '/home')
self.list_pathes.addItem(path)
しかし、セカンダリウィンドウの2つのボタンがスロットに接続されていないようです。それ以外はすべて問題ありません。QMainWindowを引数に渡さずにこのクラスを単独で使用すると、完全に機能することを確認しました。
これらのスロットが接続されていない理由についてご存知ですか?たぶん、信号が適切に放出されていませんか?
ありがとうございました。