gpt4 book ai didi

python - 副窗无槽

转载 作者:太空宇宙 更新时间:2023-11-03 19:07:57 24 4
gpt4 key购买 nike

我想为用户的设置创建一个辅助窗口,因此在我的 QMainWindow 类中,我调用一个对象 Settings,如下所示:

self.settingsAction = QtGui.QAction('Préférences', self)
self.settingsAction.triggered.connect(lambda: Settings(self))

然后,我构建我的设置类:

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)

但是我的辅助窗口的两个按钮似乎没有连接到我的插槽。除了这一点之外,一切都很好,并且我检查了,如果我单独使用此类,而不在参数中传递 QMainWindow,它会完美地工作。

您知道为什么这些插槽没有连接吗?也许信号没有正确发出?

谢谢。

最佳答案

这可能是因为您没有将父级传递给按钮,这是代码的工作版本:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui

class Settings(QtGui.QDialog):
def __init__(self, parent=None):
super(Settings, self).__init__(parent)

self.parent = parent

self.setWindowTitle(u'Préférences')

self.list_pathes = QtGui.QListWidget(self)

self.label_directories = QtGui.QLabel(self)
self.label_directories.setText(u"Dossiers surveillés :")

self.rm_directory_button = QtGui.QPushButton(self)
self.rm_directory_button.setText(u"Enlever")
self.rm_directory_button.clicked.connect(self.removePath)

self.add_directory_button = QtGui.QPushButton(self)
self.add_directory_button.setText(u"Ajouter")
self.add_directory_button.clicked.connect(self.addPath)

self.gridLayout = QtGui.QGridLayout(self)
self.gridLayout.addWidget(self.label_directories, 0, 0, 1, 1)
self.gridLayout.addWidget(self.list_pathes, 2, 0, 2, 2)
self.gridLayout.addWidget(self.rm_directory_button, 3, 2, 1, 1)
self.gridLayout.addWidget(self.add_directory_button, 2, 2, 1, 1)

self.show()
# self.connexion()

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 removePath(self):
try:
path = self.list_pathes.selectedItems()[0].text()
item = self.list_pathes.takeItem(self.list_pathes.currentRow())
del item

except IndexError:
print(u"Aucun path sélectionné")

def addPath(self):
path = QtGui.QFileDialog.getExistingDirectory(self, 'Open file', '/home')
self.list_pathes.addItem(path)

class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)

self.settingsAction = QtGui.QAction(u'Préférences', self)
self.settingsAction.triggered.connect(lambda: Settings(self))

self.toolBar = QtGui.QToolBar(self)
self.toolBar.addAction(self.settingsAction)

self.addToolBar(QtCore.Qt.ToolBarArea(QtCore.Qt.TopToolBarArea), self.toolBar)

if __name__ == "__main__":
import sys

app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

关于python - 副窗无槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com