@BlackJack
BlackJack hat geschrieben:@mephisto-online: `self.name` ist ja gerade *nicht* lokal, sondern ein Attribut auf dem Objekt. Also in Java ``this.name``, was ja auch nicht lokal wäre.
Das hatte ich auch genau so gedacht. Das sieht so aus:
Code: Alles auswählen
class ChangeLocation(QDialog):
def __init__(self, localities_db, name):
super(ChangeLocation, self).__init__()
self.setWindowModality(Qt.ApplicationModal)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.localities_db = localities_db
self.name = name
self.ui.ortsNameLineEdit.setText(self.name)
richtig ? Oder kann ich das Attribut "name" auch direkt in der ganzen Klasse verwenden ?
BlackJack hat geschrieben:Ich handhabe das normalerweise so dass ich bei GUIs mit `mixedCase`-Namen selber auch `mixedCase` für GUI-Objekte und PEP8 für die Programmlogik verwende. Benutze es also als „Feature” um die GUI und die Logik gegeneinander abzugrenzen.
Das habe ich mir auch gedacht. Wenn Qt nun mal kein PEP 8 generiert, kann ich es ja auch erst mal so belassen. Und Widget-Instanzen benenne ich dann z.B mit dem Widget-Typ im Namen wie "nameLineEdit", wenn Qt es "lineEdit1" benennt. Vielleich spricht sich PEP 8 ja mal irgendwann bei den PyQt/PySide-Jungs rum...
@DasIch
DasIch hat geschrieben:Bezüglich PEP 8 würde ich an "A Foolish Consistency is the Hobgoblin of Little Minds" erinnern...
Guter Spruch ! Das geht jetzt ein wenig ins Philosophische ! Aber ich persönlich halte PEP 8 für einen genialen Ansatz (wie, nebenbei bemerkt, Python überhaupt
und Qt finde ich auch genial, verglichen mit dem, was ich sonst kenne), wenn ich da an die anderen Sprachen denke, mit denen ich gearbeitet habe und jeder seinen eigenen "Stil" einbringen kann, was nicht unbedingt zu guter Lesbarkeit von fremdem Code beiträgt.
DasIch hat geschrieben:Qt hält sich nicht an PEP 8, schreibt man dann Code der von Qt abhängt, bricht man Konsistenz indem man PEP 8 Namensgebung nutzt, dass schadet der Lesbarkeit eher als dass es hilft. Vorallem dann wenn man von Klassen die aus Qt kommen erbt, was ja durchaus öfter vorkommt und hier auch der Fall zu sein scheint.
Ja, schön ist das nicht, aber da wird man wohl erst mal mit leben müssen.
@EyDu
EyDu hat geschrieben:Prinzipiell muss deine Code so ausgelegt sein, dass du zum Beispiel die ganze GUI wegschmeißen kannst und durch eine ersetzt. Ohne, dass du auch nur ein Stück an der Programmlogik oder Datenbank änderst.
Einfach ne andere Gui drüber setzen, klappt das ? Bei meinen etwas komplexeren Grafiken in meinen beiden letzten Programmen (selbst gezeichnete 2- und 3D-Grafiken, Java/Swing, Java/Android) konnte ich das vergessen. In diese Dinger hatte ich die meiste Arbeit investiert und konnte davon aber fast nichts für Xamarin-C# gebrauchen. Es war weniger Arbeit, es neu zu schreiben in Anlehnung an den vormals investierten "Gehirnschmalz". Die Grafiken (immer auch Teil der Gui) musste ich bislang immer neu schreiben (Pascal->GEM unter Windows/DOS, GEM->Java/Swing, Swing->Xamarin/.NET/mono und jetzt nach Qt)
EyDu hat geschrieben:Schau dir dazu mal das MVC-Pattern an, das ist für solche Sachen gut geeignet. Du musst es auch nicht vollständig implementieren, bei dir kann man etwas abkürzen.
(Klingt ja fast wie MFC ! Igitt, das war vielleicht ein Krampf !) Danke schön ! Habe zwar keine Ahnung, was MVC ist, schaue ich mir aber sicherlich gleich mal an.
EyDu hat geschrieben:Wenn man es ganz vereinfach ausdrücken möchte, dann hast du eine Klasse für die GUI (View) und eine für den Controller. In letzterem befindet sich die ganze Logik... Wenn deine GUI nun etwas anzeigen will, dann ruft sie dazu eine Methode des Controllers auf und holt sich von diesem die Daten (oder stößt Berechnungen an etc.). Mehr darf die View auch schon nicht tun: nur Berechnungen für die Anzeige, keinerlei Logik und ganz sicher nicht das Senden von SQL-Statements an den Controller
Momentan habe ich eine main, in der ich z.B. Systempfade ermittele und an die MainWindow-Instanz übergebe. In MainWindow habe ich meine zentalen Programm-Daten (Flags, Variablen, eine Liste mit 12 Datenklassen-Instanzen und die DB-Instanzen), die ich jeweils an die von hier aufgerufenen Gui-Instanzen übergebe (Daten rein, ggf. geänderte Daten zurück). Für File- und DB-I/O, Berechnungen, Auswertungen gibt es eigene Klassen(-Module). D.h., ich sollte zwischen main und MainWindow noch eine "Controller"-Klasse schalten ? Hört sich an wie eine gute Idee ! Da dürfte ich dann aber wahrscheinlich keine Qt-Datentypen (zB. QString) verwenden ?
Wie macht man das mit SQL, wenn man Qt-Models (und überhaupt QtSql) verwendet ? Da sind doch die SQL-Statements eingebaut ?