Seite 1 von 1

QFileDialog öffnet sich nicht

Verfasst: Samstag 6. April 2019, 16:21
von Phobit
Hallo,
ich möchte, dass mein Programm ein Fenster zeigt, mit einem Button und einem leeren Textfeld.
Wenn man den button drückt, soll sich der QFileDialog öffnen, man soll eine datei auswählen, dann soll deren name im textfeld stehen.

hier mein code:

Code: Alles auswählen

class QT-FileDialog(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        openButton = QPushButton("Open File", self)
        openButton.clicked.connect(self.showDialog)

        self.myTextBox = QTextEdit(self)
        self.myTextBox.move(150, 150)
        
        self.setGeometry(300, 300, 300, 300)
        self.setWindowTitle("FileQT")
        self.show()

    def showDialog(self):
        fileName = QFileDialog.getOpenFileName(self, "OpenFile", "/home")
        self.myTextBox.setText(fileName)
Wenn ich das programm starte, erscheint fenster mit button & feld, wenn ich den button drücke, kommt der error:

Traceback (most recent call last):
File "/home/phobit/PycharmProjects/QT/QT-FileDialog", line 28, in showDialog
self.myTextBox.setText(fileName)
TypeError: setText(self, str): argument 1 has unexpected type 'tuple'

wenn ich das textfeld weglasse und den knopf drücke, passiert einfach gar nichts.

Woran kann das liegen?

Re: QFileDialog öffnet sich nicht

Verfasst: Samstag 6. April 2019, 16:58
von Sirius3
Hast Du in der Dokumentation nachgelesen, was `getOpenFileName` als Rückgabewert hat?

Die Methode initUI ist überflüssig und kann direkt in __init__ stehen. Ein - darf in einem Klassennamen nicht vorkommen. Die Schreibweise der Variablennamen hält sich nicht an die Konvention.

Re: QFileDialog öffnet sich nicht

Verfasst: Freitag 12. April 2019, 16:20
von Phobit
Habs jetzt geschafft den FileDialog zu öffnen, nur nicht so wie er soll. Der Code:

Code: Alles auswählen

class Test(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        openButton = QPushButton("Open File", self)
        openButton.clicked.connect(self.openFileNameDialog())

        self.myTextBox = QTextEdit(self)
        self.myTextBox.move(150, 150)

        self.setGeometry(300, 300, 300, 300)
        self.setWindowTitle("Test")
        self.show()

    def openFileNameDialog(self):

        options = QFileDialog.Options()

        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "",
                                                  "All Files (*);;Python Files (*.py)", options=options)
Nun sollte sich doch laut dem .clicked.connect der FileDialog öffnen, sobald ich den Button anklicke. Der Dialog öffnet sich aber schon sobald ich das Programm starte. Wenn ich das .cklicked.connect auskommentiere, bleibt der FileDialog geschlossen. Wenn er sich nun öffnet und ich eine datei auswähle, kommt der fehler

openButton.clicked.connect(self.openFileNameDialog())
TypeError: argument 1 has unexpected type 'NoneType'

Kann das vllt an dem Bug in PyCharm (ist bekannt) liegen, dass PyCharm kein .connect() kennt?

Re: QFileDialog öffnet sich nicht

Verfasst: Freitag 12. April 2019, 16:23
von __deets__
Was soll denn das fuer ein bekannter Bug sein? Und welchen Einfluss hat ein Bug deiner IDE auf ein Programm, das du auch davon voellig unabhaengig starten kannst? Und das dort den gleichen Fehler hat?

Schau dir mal GENAU die Zeile mit dem connect an. Und schau mal auf Beispiele, wo die Verwendung von connect vorgemacht wird. Da gibt es bei dir einen entscheidenden Unterschied, der beide Probleme erklaert.

Re: QFileDialog öffnet sich nicht

Verfasst: Freitag 12. April 2019, 16:23
von Phobit
Ok, muss mich etwas korrigieren, wenn man ein modukl nachinstalliert wird das connect() erkannt. dafr markiert er jetzt in der zeile

Code: Alles auswählen

openButton.clicked.connect(self.openFileNameDialog())
das self.openFileNameDialog mit dem kommentar Expected type 'Union[(...) -> None, pyqtBoundSignal]', got 'None' instead als fehler.

Re: QFileDialog öffnet sich nicht

Verfasst: Freitag 12. April 2019, 16:27
von __deets__
Ja, und den Fehler bekommst du ja auch. Und was ich gerade gesagt habe gilt immer noch. Wie sehen andere Beispiele zu connect aus, und was ist der Unterschied zu dem was du machst? Oder mal anders gefragt, was ist der Unterschied zwischen den beiden prints:

Code: Alles auswählen

def immer_muss_man_das_gleiche_erklaeren():
       return "Aufruf einer Funktion ist etwas anderes als das Funktionsobjekt"

print(immer_muss_man_das_gleiche_erklaeren)
print(immer_muss_man_das_gleiche_erklaeren())

Re: QFileDialog öffnet sich nicht

Verfasst: Freitag 12. April 2019, 16:36
von Phobit
Ups, das ist mir jetzt peinlich...Da hab ich gar nimmer drauf geachtet xD Danke fürs "mal wieder das gleiche erklären"... ;)