PyCharm externe Tools

Probleme bei der Installation?
Antworten
Skychaser1971
User
Beiträge: 4
Registriert: Freitag 15. Dezember 2023, 16:16

Hi Leute,

Ich versuche PyCharm auf einer Linux Maschine mit dem qt-designer zu verknüpfen. Leider läuft das nicht so erfolgreich wie gedacht.


Das System

Code: Alles auswählen

System:
  Kernel: 6.1.0-1026-oem x86_64 bits: 64 compiler: N/A Desktop: Cinnamon 5.8.4 tk: GTK 3.24.33
    wm: muffin dm: LightDM Distro: Linux Mint 21.2 Victoria base: Ubuntu 22.04 jammy
python version

Code: Alles auswählen

stephan@stephan-ZenBook-UX425IA-UM425IA:~$ python3
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
Ich benutze PyCharm Community, PyQt5 ist in meinem Projekt aktiviert.

Den Designer und qt5 dev tools habe ich, der läuft auch einzeln, nur gelingt mir die Verknüpfung mit Pycharm nicht.

Leider sind viele Anleitungen entweder auf Windows bezogen oder ich bin einfach zu blöd diese auszuführen, das Problem sitzt ja meist vor dem Monitor.

Also ich in Pycharms auf Settings > Tools > externe Tools und füge ein Tool hinzu.

Name: qt-designer Group: External Tools
Tools Settings
Programm: /usr/lib/x86_64-linux-gnu/bin designer
Working directory$ProjectFileDir$ was mich zu /home/mein Name/PyCharm Projects/MyProject führt

Was ich dann bei dem 2ten Tool bzw PyUIC eintragen soll da blick ich aber nicht wirklich durch.

Ich möchte quasi den designer aus PyCharm starten und nach möglichkeit falls das mit PyCharm Community überhaupt geht das .ui in python umgewandelt bekommen.

Wäre nett wenn mich da jemand aufklären könnte.

Grüße Stephan
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Skychaser1971: Warum möchtest Du die *.ui-Datei in Python umwandeln? Das macht man eigentlich nicht. Man kann die *.ui-Dateien selbst mit dem `PyQt5.uic`-Modul zur Laufzeit des Programms laden ohne sich da immer noch in einem Extrazwischenschritt Quelltextdateien generieren zu müssen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Skychaser1971
User
Beiträge: 4
Registriert: Freitag 15. Dezember 2023, 16:16

Hi _blackjack_

Ja ich weiß nen kompletten Anfänger etwas zu erklären ist immer schwierig :D

Ich möchte erstmal betonen das die ein Hobby von mir ist / wird und ich kein professioneller Programmierer werden will.
Hab mir ein Buch bestellt das kommt hoffentlich nächste Woche.

Dann hab ich bereits wohl den ersten part falsch verstanden und mit PyUIC als externes Tool wird dann wahrscheinlich genau der Schritt ausgeführt den du oben beschreibst.
Dann ist das aber in einigen youtube Tutorials schlecht beschrieben denn da wird von create your gui in designer and convert it usable in a python Langauge code geredet weshalb ich verstanden habe das die .ui dann umgewandelt wird.

Use QTDesigner to generate a GUI interface and convert it to a .py file using PyUIC. so steht es wörtlich dort zumindest.

Ändert aber nichts an der Tatsache das ich den designer nicht aus PyCharm starten kann da ich dann folgende Fehlermeldung erhalte :

Cannot start process, the working directory ' /home/stephan/PycharmProjects/MyProjects' does not exist obwohl das der Pfad zu meiner Projekt Datei ist.

Ich nehme halt jetzt einfach mal an weil ich praktisch das hier noch nicht ausgeführt habe :

Man soll ja ein 2tes externes Tool generieren nämlich eben:

Name: PyUIC Tools:extern Tools

Die Frage is was mus da bei Linux in die Pfadangaben.

Grüße Stephan
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Skychaser1971: Es gibt schlechte Tutorials und sogar schlechte Bücher. Beides kann letztendlich jeder verbreiten. Internet halt. 🙂

Wenn Programme die so verbreitet und verwendet sind wie PyCharm sagen ein Verzeichnis existiert nicht, sollte man in der Regel davon ausgehen, dass das Verzeichnis tatsächlich nicht existiert. Im vorletzten Beitrag hast Du selbst das noch anders genannt. Ist das jetzt `MyProject` oder `MyProjects`?

Ist die Integration denn überhaupt so wichtig? Das hat man doch ähnlich schnell auch ohne die IDE gestartet. Und wie gesagt, den PyUIC-Schritt mit Quelltext generieren macht man eh nicht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Skychaser1971
User
Beiträge: 4
Registriert: Freitag 15. Dezember 2023, 16:16

moin,

nimms mir net krumm aber nutzt du Linux oder gehst du von Windows aus ?

Du kannst davon ausgehen das ich meine Verzeichnisse schon kenne und die auch richtig eingebe

Jedenfalls der Pfad /home/stephan/PyCharmProjects/MyProjects existiert und wird auch so in den Dienst reinkopiert, daher schließe ich den Fehler schonmal aus. Da alles soweit korrekt funktioniert

also das erstellen meiner Projecte in PyCharm, der Designer Standalone, das umwandeln über pyuic5 im Terminal und die Weiterverarbeitung in PyCharm geh ich mal davon aus das nur die Verzeichnisstruktur eine andere ist.
@Skychaser1971: Es gibt schlechte Tutorials und sogar schlechte Bücher. Beides kann letztendlich jeder verbreiten. Internet halt. 🙂
Da ich aber wiederrum von python noch keine Ahnung habe magst du in dem Punkt schon recht haben, jedoch Frage mich warum das dann in 1000en von yt Tutorials so gemacht wird besonders bei
kleinen Programmen klicken sich Leute ihre Gui eben einfach in qt-designer zusammen und verwenden den Code dann weiter. Würde ich das selbst schreiben würde ich in Pycharm ja auch:

Code: Alles auswählen

 mein erster Test

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys


def window ():
    app = QApplication(sys.argv)
    win = QMainWindow()
    win.setGeometry(200, 200, 400, 400)
    win.setWindowTitle("Kleines Gui Fenster")

    label = QtWidgets.QLabel(win)
    label.setText("Systemdienste")
    label.move(150, 50)

    win.show()
    sys.exit(app.exec_())

window()
eintippen um ein kleines Fenster zu erzeugen das ich dann wenn ich das erweitere noch mit click Buttons und anderen Optionen wie einer Ausgabe usw versehen

Insofern werde ich erstmal warten bis das Buch da ist und mir Grundwissen aneignen denn das ist evtl der falsche Weg anzufangen. Jedoch ist es auch keine gute Idee zu sagen das
mach man so nicht ohne wenigstens eine Grundidee zu vermitteln wie man es macht.

Ich danke für deine Antwort ;)

Grüße Stephan
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der PyUIC-Complier spuckt eine dicke, fette Warnung als Kommentar in jedem generierten Quelltext aus, der sagt "NICHT VERAENDERN, GENERIERTER CODE". Warum die Leute da draussen das ignorieren, solltest du die fragen.

Aber wenn du das unbedingt so machen willst, ist die Integration des Designers etwas ueberkandidelt. Denn dann kann man ja seine .ui-Datei nur einmal erzeugen, und nie wieder anfassen. Denn die uebernimmt nicht magisch das Gefuhrwerke am generierten Quellcode  🤷‍♂️
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Skychaser1971: Ich gehe von dem aus was ich hier in den Beiträgen lesen kann, und da gibt es zwei verschiedene Schreibweisen von diesem Verzeichnis. Und wenn Du den Fehler in den Beiträgen machst, warum solltest Du den nicht auch auf dem eigenen Rechner machen? Ist schliesslich ein Flüchtigkeitsfehler der jedem passieren kann. Mir auch.

Ich habe die Grundindee vermittelt wie man das macht: mit dem `PyQt5.uic`-Modul. Da ist im Grunde *eine* relevante Funktion drin und die ruft man auf. Mit einem Argument — dem Dateinamen. Und eventuell noch einem zweiten, wenn man nicht den Rückgabewert – das Widget was man im Designer erstellt hat — direkt benutzen will, sondern gerne die Attribute davon auf ein anderes Objekt übertragen will. Komplizierter wird das nicht. Und es ist dokumentiert.

Anmerkungen zum gezeigten Quelltext: Mindestens `move()` macht man nicht. Und die Vorgabe einer `geometry()` für das Fenster in der Regel auch nicht. Pixelgenaue Grössen und Positionen funktionieren auf dem Rechner wo man das geschrieben hat, aber nicht allgemein, bei dem Zoo von Bildschirmgrössen, -auflösungen, und -einstellungen. Für die Positionen gibt es `QLayout` & Co und die Grössen ergeben sich automatisch aus dem Inhalt.

Namen sollten keine kryptischen Abkürzungen enthalten, oder gar nur daraus bestehen. Man sollte nicht nur `win` schreiben wenn man `window` meint. Dann hat man eine ”Kollision” mit der `window()`-Funktion, die eigentlich nicht sein müsste, denn Funktionen und Methoden werden üblicherweise nach den Tätigkeiten benannt die sie durchführen und `window` ist eher ein Name für ein ”Ding” wie ein Fenster, und nicht für eine Funktion. Wobei die Hauptfunktion üblicherweise `main()` genannt wird.

Warum wird `QApplication` und `QMainWindow` aus `QtWidgets` importiert, aber `QLabel` nicht?

Die `exec_()`-Methode mit dem Unterstrich ist veraltet und wird es in künftigen Versionen nicht mehr geben. Das war mal in Python 2 nötig, weil es dort ein ``exec``-Schlüsselwort gab. Das ist auch so ein Punkt für beliebige Quellen aus dem Internet: Vieles davon ist veraltet und auch neue, nicht wirklich gute Tutorials oder Videos schreiben von den veralteten Sachen ab.

Manuell geschrieben könnte das ungefähr so aussehen:

Code: Alles auswählen

#!/usr/bin/env python3
import sys

from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget


def main():
    app = QApplication(sys.argv)

    window = QWidget(windowTitle="Kleines Gui Fenster")

    layout = QVBoxLayout()
    window.setLayout(layout)

    layout.addWidget(QLabel("Systemdienste"))

    window.show()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()
Der Designer bzw. PyUIC generieren übrigens in der Regel Code, den man so nicht von Hand schreiben würde, weil diese Programme beispielsweise nicht “wissen“, dass man Qt-Properties und Signalverbindungen direkt beim erstellen des Objekts angeben kann. Der Codegenerator wird da für jeden Wert und jede Verbindung separate Codezeilen mit Aufrufen erstellen. Was dann auch dazu fürht, das jedes kleine Zwischenergebnis einen Namen braucht, damit man da die Extra-Aufrufe drauf machen kann. Da kommt generierter Code bei heraus der für den Rechner gedacht ist, nicht ”schöner” Code, der für Menschen zum lesen oder bearbeiten gedacht ist. Die generierte Datei soll man ja auch gar nicht anfassen. Die entsprechende Warnung das nicht zu tun, die da mitgeneriert wird, hat __deets__ ja bereits erwähnt.

Was die 1000de YouTube-Tutorials angeht: Es gibt halt massenweise Leute, die einfach Content generieren wollen und dann nachdem sie sich zwei drei andere meistens nicht so gute Tutorials angeschaut haben, auch eines machen. Die Qualität steigt auf diese Weise eher nicht.

Falls Python auch Neuland ist, möchte ich noch den Style Guide for Python Code erwähnen, wo Qt und damit auch PyQt in den Namensschreibweisen von den Python-Konventionen abweicht. Das kann man für den GUI-Code auch machen, aber bei der Programmlogik/allem was nicht mit der GUI zu tun hat, würde ich mich an die Python-Konventionen halten. Das kann man auch als ”Test” sehen ob man GUI und Programmlogik sauber getrennt hat.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Skychaser1971
User
Beiträge: 4
Registriert: Freitag 15. Dezember 2023, 16:16

Hi _blackjack_

also das Beispiel von mir oben war auch natürlich ein nachgemachtes aber manuelles kein QT5 generierter Code. Aber wie gesagt erstmal die Basics lernen bevor man sich mit nem Generator Code generieren lässt. Und danke für deine Ausführungen :)

Habe jetzt gutes Material endeckt wo derjenige ganz genau erklärt warum das keine gute Idee ist in diesem generieren Code rumzupfuschen und auch sich da schlauerweise einfach Sachen rauszukopieren, die ja nachträglich wenn man im designer nochwas hinzufügen müsste
dann ja auch wieder wegwären da ja dabei wieder ein generierter Code rauskommt. Das zieh ich mir jetzt erstmal rein.

Seltsamerweise scheinen das aber echt viele Leute zu machen und in Tutorials zu verbreiten..aber wie du schon sagtest Internet halt. Ich muss zugeben das ich auch so gestartet hätte ohne deine Warnung

Bei dem PyCharm Community Ding war ja auch nur Gedanke praktisch alles unter einem Dach zu haben und von dort Handgeschriebene Sachen drucken und halt qt öffnen und so zu machen, aber da gibt es sicher auch andere Wege.

Jedenfalls Danke nochmal für deine Ausführungen :)

Grüße Stephan
Antworten