Eine Merk- und Lernhilfe

Du hast eine Idee für ein Projekt?
Antworten
Benutzeravatar
wwwheimer
User
Beiträge: 25
Registriert: Sonntag 17. Juli 2011, 16:35

Hallo!
Als alter Hobbyprogrammierer habe ich mir nun die Serverprogrammierung zum Ziel gemacht. Der Apache ist installiert und erste Versuche mit PHP habe ich hinter mir. Zum Wechsel auf Python habe ich mich entschieden, weil sich damit auch Desktopprogramme erstellen lassen und man Code-Ideen schnell ausprobieren kann.
Eine nicht unwichtige Entscheidungshilfe war mir aber auch dieses Forum. Ich lese hier seit etwa 3 Wochen täglich und bin von der Qualität vieler Beiträge angetan. Vieles davon werde ich wohl erst verstehen wenn ich mich selbst mit Python länger beschäftigt habe.

Mein erstes Projekt in Python soll mir beim weiteren Lernen helfen. Es soll dazu in einfachster Form Notizen entgegennehmen und diese ebenso so einfach wieder ausgeben.
Das GUI soll aus nur zwei Textfeldern bestehen; ein Feld für die Notiz und ein Feld für den Titel/Namen dieser Notiz.
Das einzeilige Textfeld soll außerdem Kommandos wie Löschen oder Neu per vorangestelltem # (z.B.) ermöglichen. Wenn ich eine Notiz löschen bzw. neu anlegen will, dann soll es reichen dort ein #d oder #n (Return) einzugeben. Diese Doppelfunktion des einzeiligen Textfeldes dürfte nicht ganz so einfach zu realisieren sein. Aber gerade deshalb möchte ich es auch so haben.

Mir geht es nun nicht darum mit dem Coden sofort anzufangen, sondern um das Konzept und die dazu nötigen Module, Funktionen oder wie das in Python sonst noch benannt wird. Dinge die ich noch nicht wissen kann und wo mir Erfahrene raten können.
Frage: Wie würdet ihr das lösen?
Ich möchte das kleine Programm (Script?) auch mit den Standard-Modulen von Python schreiben. Installiert habe ich die Versionen 2.7 und 3.2 und mein Betriebssystem ist WinXP. Hoffe wegem Letzterem hier nicht gelyncht zu werden :)

Beste Grüße!
BlackJack

@wwwheimer: Das ist schwierig, denn die meisten werden Dir wahrscheinlich erst einmal raten die Einschränkung auf die Standardbibliothek fallen zu lassen. Denn bei Webanwendungen möchte man mindestens ein Mikrorahmenwerk wie Bottle oder Flask verwenden. Wenn es etwas umfangreicher sein darf, dann käme auch Django in Frage.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Willst du jetzt eine Webanwendung schreiben oder ein Desktop-Programm?
Falls ersteres: Siehe BlackJacks Post. Wobei ich selbst zu der Minderheit hier gehöre, die es völlig okay findet, als Einstieg in die Webprogrammierung und bei so einer kleinen Geschichte das auch allein mittels CGI zu machen.
Falls letzteres: Hast du ein bestimmtes GUI-Toolkit im Blick? Wenn sich "Standard-Lib" auf das gesamte Projekt bezieht, dann müsste es wohl tkinter sein.
Benutzeravatar
wwwheimer
User
Beiträge: 25
Registriert: Sonntag 17. Juli 2011, 16:35

Tut mir leid, dass es doch nicht so klar rübergekommen ist wie ich dachte!
Ja, es soll ersteinmal eine reine Desktop-Anwendung werden. Obwohl es mich natürlich reizt gleich in die Vollen zu gehen und mir bspw. Django auch zu installieren, lasse ich es vorerst doch lieber um zuerst so grundlegende Dinge wie den sicheren Umgang mit Textdateien und anderen Basics zu lernen. Denke, dass ich dann in einiger Zeit auch besser beurteilen kann welche Entwicklungsumgebunmg oder welches Framework mir zusagt. Will mich also vorerst mit der Shell/IDLE von Python begnügen.

Dass Tkinter als GUI bei den meisten Leuten kein Thema ist, das verstehe ich wohl, aber finde es dennoch schade. Denn bei meiner Suche nach Code-Beispielen bin ich in den letzen Tagen immer wieder auf Code gestossen in dem Module eingebunden waren, die in der Standard nicht verfügbar sind und wo es die jeweiligen Coder nicht für nötig hielten darauf hinzuweisen. Im Prinzip muss ein Anfänger bei Python stets damit rechnen, dass Beispielcode bei ihm nicht funktioniert und man erst um die Eigenheiten der Versionen bescheid wissen muss, um solche unkommentierten Beispiele/Snippet zum Laufen zu bringen. Immerhin weiß ich jetzt dass Tkinter in der 3er Version tkinter heißt.;)

So nun noch eine Frage zur einzeiligen Textbox: kann ich die so wie angedacht verwenden? Also in der Weise, dass ich dort einmal den Namen der jeweiligen Notiz eingeben kann und dass ich den Interpreter dazu bewegen kann schon das erste eingegebene Zeiche auszuwerten, um dann eventuell - wie in der IDLE - eine Liste der vorhanden Einträge angezeigt zu bekommen, die mit dem eingegebenem Zeichen anfangen? Wahrscheinlich werde ich noch eine Listbox benötigen, die sich dann über der Textbox öffnet, sonst aber unsichtbar ist.
BlackJack

@wwwheimer: Tkinter ist für einige Sachen ganz gut geeignet, zum Beispiel einfache GUIs, wo man nur ein paar Textboxen und Buttons benötigt oder Vektorgrafik auf einem Canvas. Wenn man aber etwas komplexere GUI-Elemente wie Bäume oder Tabellen benötigt, dann muss man sich das entweder selber programmieren, oder auch da Lösungen ausserhalb der Standardbibliothek suchen. Dann kann man aber gleich auf ein neueres und ”vollständigeres” GUI-Toolkit umsteigen.

Die GUI mit der Befehlszeile für die Notizen sollte so möglich sein. Allerdings ist eine Frage ob man mit GUI-Programmierung beginnen sollte.
Benutzeravatar
wwwheimer
User
Beiträge: 25
Registriert: Sonntag 17. Juli 2011, 16:35

@Black Jack, für mich ist das keine Frage.
Habe lange Zeit mit Visual Basic Spass gehabt und fand nicht, dass die einfache Weise Steuerelemente zu benutzen mir das Nachdenken über die Programmlogik erspart hätte. Jetzt habe ich es wieder mit Steuerelementen zu tun, die sich aber 'Widgets' nennen und nicht so einfach wie bei VB benutzbar sind. Da liegen Welten zwischen! Gibt es für Python ein nur halbwegs vergleichbares GUI-Toolkit?
Aber egal. Werde mal einfach anfangen und sehen wie weit ich komme. Über hilfreiche Tips freue ich mich natürlich. Für Grundsatzdiskussionen aber fehlt mir einfach noch die Erfahrung mit der mir neuen Sprache.
BlackJack

@wwwheimer: Ah, okay. Mir war nicht klar, dass Du schon Erfahrung mit ereignisorientierter Programmierung hast.

Es gibt AFAIK kein vergleichbares GUI-Toolkit, weil das bei VB mehr als ein GUI-Toolkit war. VB, zumindest vor .NET, ist eine Programmiersprache, eine IDE, ein GUI-Designer, und ein GUI-Toolkit, alles in einem Programm. Das ist bei Python, und auch bei vielen anderen aktuellen Programmiersprachen (inklusive VB .NET) alles getrennt und unabhängig voneinander. Das GUI-Toolkit bei VB sind/waren die Widgets der Win32-API oder die „Microsoft Foundation Classes” (MFC). Vielleicht hat VB auch noch eigene Widgets hinzugefügt.

Heutzutage hat man lieber unabhängige Komponenten, die mit mehreren Programmiersprachen und auf mehreren Plattformen laufen. Darum kann man in modernen GUI-Designern nicht mehr einfach einen Button absolut positionieren — beziehungsweise sollte man das nicht mehr so machen — und direkt im Designer Quelltext für den Button schreiben. Denn die erzeugte GUI soll ja unabhängig von der Programmiersprache, von der Bildschirmauflösung, und vom Betriebssystem sein, soweit das eben möglich ist.

Bei Tkinter und wxPython schreibt man das GUI-Layout in der Regel von Hand als Quelltext. Bei Gtk und Qt kann man den Qt-Designer und Glade verwenden um das GUI-Layout als Datendatei zu speichern und die dann dynamisch im Programm zu laden und die GUI-Elemente mit Code zu verbinden. Es gibt für wxPython/wxWidgets zwar einige GUI-Designer und auch ein allgemeines Datenformat (XRC), aber das hat sich soweit ich das sehe nicht wirklich durchgesetzt. Im Gegensatz zu den Lösungen bei Gtk und Qt ist es umständlicher zu benutzen und nicht alle Designer kennen auch alle Widgets die wxPython zusätzlich gegenüber wxWidgets bietet.
Antworten