Przykro mi, że tytuł jest taki pełny usta, ale w zasadzie to, co próbuję tutaj zrobić, jest to, że mam 3 przyciski, wszystkie z nich otwierają QFiledialog dla użytkownika, aby wybrać plik do użycia. Ponieważ akcja jest taka sama, chciałbym użyć tej samej funkcji dla wszystkich 3, ale w zależności od tego, który przycisk jest naciśnięty, muszę zaktualizować różne Qlineedit, aby odzwierciedlić ścieżkę plików w GUI. Jak to zrobić?

        #Create the prompt for user to load in the q script to use
        self.qFileTF = QtGui.QLineEdit("Choose the q script file to use")
        self.qFileButton = QtGui.QPushButton("Open")
        self.qFileButton.setFixedSize(100,27)
        self.fileLayout1.addWidget(self.qFileTF)
        self.fileLayout1.addWidget(self.qFileButton)

        #Create the prompt for user to load in the light house file to use
        self.lhFileTF = QtGui.QLineEdit("Choose the light house file to use")
        self.lhButton = QtGui.QPushButton("Open")
        self.lhButton.setFixedSize(100,27)
        self.fileLayout2.addWidget(self.lhFileTF)
        self.fileLayout2.addWidget(self.lhButton)

        #Create the prompt for user to choose to reference an older version of q script
        self.oldQCB = QtGui.QCheckBox("Reference an older version Q script")
        self.oldQTF = QtGui.QLineEdit("Choose the q script file to use")
        self.oldQTF.setEnabled(False)
        self.oldQButton = QtGui.QPushButton("Open")
        self.oldQButton.setEnabled(False)
        self.oldQButton.setFixedSize(100,27)
        self.fileLayout3.addWidget(self.oldQTF)
        self.fileLayout3.addWidget(self.oldQButton) 

        self.connect(self.qFileButton, QtCore.SIGNAL("clicked()"), self.loadFile)
        self.connect(self.lhButton, QtCore.SIGNAL("clicked()"), self.loadFile)
        self.connect(self.oldQButton, QtCore.SIGNAL("clicked()"), self.loadFile)

    def loadFile(self):     
        selFile = QtGui.QFileDialog.getOpenFileName()           

        if self.qFileButton:
            self.qFileTF.setText(selFile)
        elif self.lhFileTF:
            self.lhFileTF.setText(selFile)
        else:
            self.oldQTF.setText(selFile)    
1
Orchainu 25 sierpień 2012, 04:06

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj użyć metody sender:

def loadFile(self):
    selFile = QtGui.QFileDialog.getOpenFileName()
    if self.sender() == self.qFileButton:
        self.qFileTF.setText(selFile)
    elif self.sender() == self.lhFileTF:
        self.lhFileTF.setText(selFile)
    else:
        self.oldQTF.setText(selFile)      
2
Pierre GM 25 sierpień 2012, 00:11

Można przejść QLineEdit, aby zmienić jako dodatkowy parametr do gniazda za pomocą funkcji lambda (lub Częściowa funkcja):

    def loadFile(lineEdit):
        return lambda: self.loadFile(lineEdit)

    self.qFileButton.clicked.connect(loadFile(self.qFileTF))
    self.lhButton.clicked.connect(loadFile(self.lhFileTF))
    self.oldQButton.clicked.connect(loadFile(self.oldQTF))

def loadFile(self, lineEdit):     
    selFile = QtGui.QFileDialog.getOpenFileName()           
    lineEdit.setText(selFile)
1
alexisdm 26 sierpień 2012, 02:37