Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
gui:start [2009/09/30 10:12]
dirtyoerti von c:gui:start, Anpassungen um Abstand von C/C++ zu nehmen
gui:start [2022/09/22 19:58] (aktuell)
Zeile 1: Zeile 1:
 ====== GUI  ====== ====== GUI  ======
  
-GUI ist die Abkürzung für (engl) **G**raphical **U**ser **I**nterface ​was so viel heißt wie grafische Benutzeroberfläche.+GUI ist die Abkürzung für (engl.**G**raphical **U**ser **I**nterface“ und bedeutet übersetzt „grafische Benutzeroberfläche“. Sie dient als Schnittstelle zwischen Benutzer und Programm und hat in vielen Bereichen die Textkonsolen oder Terminals abgelöst. Konsolen sind jedoch immer noch mehr oder weniger in aktuellen Betriebssystemen enthalten (Terminal bei Linux/Unix, cmd.exe unter Windows).\\ 
 +Dabei werden grafische Oberflächen auf Grund ihrer einfachen Bedienbarkeit der Kommandozeile meist vorgezogen. Für unerfahrene Benutzer entfällt das Suchen nach passenden Kommandozeilenbefehlen und außerdem sind Programme dadurch optisch ansprechender. Vor allem unter Linux und Unixsystemen nimmt die Konsole jedoch immer noch einen sehr großen Stellenwert ein, da man mit etwas Erfahrung deutlich schneller arbeiten kann, als wenn man sich durch Menüs klicken muss. 
 +Jetzt wollen wir uns aber einmal mit den verschiedenen Elementen einer grafischen Schnittstelle beschäftigen:​
  
-===== Was ist das? ===== +===== Teilgebiete ​===== 
-Eine Benutzeroberfläche macht ein Programm leichter bedienbar und sieht auch schöner aus.+==== Desktop-Umgebungen ==== 
 +Als Desktop-Umgebungen werden grafische Benutzeroberflächen zur Verwendung des Betriebssystems bezeichnet. Fälschlicherweise werden sie oft selbst "​Betriebssystem"​ genannt. Sie können sowohl fest in das Betriebssystem integriert (z.B. Windows) als auch frei wählbar sein (z.B. Linux mit Gnome, KDE, LXDE, usw.).\\  
 +Ihr Aussehen ist größtenteils anpassbar. Unter Linux und Unix kann man außerdem mehrere Desktop-Umgebungen parallel installieren und während des Betriebs zwischen ihnen wechseln. \\  
 + \\  
 +  
 +{{user:​nufan:​contest:​firstbirthday:​gnome.jpg|Ubuntu mit Gnome 2.26}} 
 +{{user:​nufan:​contest:​firstbirthday:​kde.jpg|Kubuntu mit KDE 4.2}} \\  
 +{{user:​nufan:​contest:​firstbirthday:​xp.jpg|Windows XP}} 
 +{{user:​nufan:​contest:​firstbirthday:​vista.jpg|Windows Vista Aero}}
  
-{{:​c:​proggen.png|}}+==== Steuerelemente (Widgets) ==== 
 +Die Funktionen des GUIs werden durch Steuerelemente (auch "​Widgets"​ genannt) aufgerufen. Durch Eingabegeräte können ihre Eigenschaften verändert werden. Widgets können beliebig miteinander zu komplexen Menüs kombiniert werden.
  
-=== Das Problem === +<​html><​div style="​float:​right;"></​html>​ 
-„Die Programme, die ich geschrieben habe öffnen sich immer in einem schwarzen (Windows, cmd) oder weißen (Linux, Shell) Fenster.  +{{user:​nufan:​contest:​firstbirthday:​button.png|Button}} \\  
-Die Programme, die ich benutze sehen ja auch anders aus.  +{{user:​nufan:​contest:​firstbirthday:​slider und spinbox.png|Slider und Spinbox}} \\  
-Was kann ich tundamit meine Programme auch eine GUI bekommen?​“+{{user:​nufan:​contest:​firstbirthday:​textbox checkbox buttons.png|TextboxCheckboxen und Buttons}} \\  
 +<​html></​div></​html>​
  
-=== Die Lösung === +Beispiele ​für Widgets: 
-Ihr könnt eine eigene GUI für ein Programm erstellen. Dazu benötigt ihr zusätzliche Bibliotheken mit deren Funktionen ihr Benutzeroberflächen erstellen könnt.+  * Fenster 
 +  * Buttons 
 +  * DropDown-Menüs 
 +  * Symbolleisten 
 +  * Checkboxen 
 +  * Scrollbars 
 +  * Fortschrittsbalken 
 +  * Textboxen 
 +  * Slider 
 +  * Spinboxen 
 +  * Radiobutton
  
-===== Bibliotheken ===== 
-Hier seht ihr einen (kleinen) Teil der verschiedenen Bibliotheken:​ 
  
-==== Plattformübergreifend ​==== +==== Eingabe ​==== 
-  * [[gui:​gtk:​start|GTK+]] ​(C) +Zur Kommunikation des Benutzers mit der Oberfläche werden Eingabegeräte benötigt. Am häufigsten werden dafür Maus und Tastatur verwendet. Durch einfache Mausklicks oder das Drücken von Tasten können Widgets im GUI ausgewählt oder verändert werden.\\  
-  * gtkmm (C++) +Es gibt aber auch andere Eingabegeräte,​ die z.B. auf Berührung ​(Touchscreen), Bewegung ​(z.B. [[http://​de.wikipedia.org/​wiki/​Wii-Fernbedienung|Wiimote]][[http://​de.wikipedia.org/​wiki/​EyeToy|EyeToy]]) oder Geräusche ​(Sprachsteuerungreagieren. In Spielen werden oft Joysticks oder Gamepads verwendet.
-  * [[Allegro:Start|Allegro (C, für Spiele)]] +
-  * Qt +
-  * [[gui:wx:start|wxWidgets ​(C++)]]+
  
-==== Linux/​UNIX ​==== +===== GUI-Programmierung ===== 
-  * KDE+Durch Verwendung externer Bibliotheken kann man auch für eigene Anwendungen Benutzeroberflächen bereitstellen. Einerseits kann man dafür direkt die bereitgestellten Bibliotheken des jeweiligen Betriebssystems verwenden oder besser eine der vielen plattformunabhängigen Bibliotheken. Solche Bibliotheken basieren oft auf Callbacks (Funktionen,​ die aufgerufen werden, wenn ein Widget verwendet wird).
  
-==== Windows ==== +Beispiele zu bekannten systemunabhängigen GUI-Bibliotheken und Programmen von denen sie verwendet werden:
-  * MFC+
  
 +==== GTK+ (C)====
  
-===== Kompilieren ===== +{{:​gui:​gtkmm:​gtkmm_logo.png?​80x80 |}}Das **G**IMP-**T**ool**k**it ist eine freie Bibliothek (unter ​der LGPL) , mit der ihr grafische Benutzeroberflächen (GUI) in der Programmiersprache C erstellen könntSie wurde anfangs für das freie Bildbearbeitungsprogramm [[http://​www.gimp.org|GIMP]] geschrieben. Allerdings sind auch die GUIs vieler anderer Programme mit GTK+ erstellt worden, zum Beispiel die freien Desktopumgebungen [[http://​www.gnome.org|GNOME]] ​oder [[http://​www.xfce.org|Xfce]],​ sowie viele andere Anwendungen. Für GTK+ existieren auch noch Bindings (Anbindungen) für einige andere Programmiersprache,​ wie C++ ([[http://​www.gtkmm.org|gtkmm]]),​ Java (java-gnome),​ Python ([[http://​www.pygtk.org|PyGTK]]),​ C# ([[http://​www.mono-project.com|GTK#​]],​ im Mono-Projekt) und mehr.
-Um das Programm zu kompilieren müssen die Pfade der zusätzlichen Bibliotheken dem Linker mitgeteilt werdenDies kann über die Entwicklungsumgebung ​oder durch Kommandozeilenparameter geschehen.+
  
-===== Beispiele =====+  * Wird verwendet von: Gnome, LXDE, GIMP, OpenOffice 
 +  * Zum [[gui:​gtk:​start|GTK+-Tutorial]]
  
-==== GTK+ ====+==== gtkmm (C++) ====
  
-Das **G**IMP-**T**ool**k**it ist eine freie Bibliothek (unter der LGPL) , mit der ihr grafische Benutzeroberflächen (GUI) in der Programmiersprache C erstellen könnt. Sie wurde anfangs für das freie Bildbearbeitungsprogramm [[http://www.gimp.org|GIMP]] geschrieben.\\ Allerdings sind auch die GUIs vieler anderer Programme mit GTK+ erstellt wordenzum Beispiel ​die freien Desktopumgebungen [[http://​www.gnome.org|GNOME]] oder [[http://​www.xfce.org|Xfce]],​ sowie viele andere Anwendungen.\\ Für GTK+, welches für geschrieben wurde, existieren Bindings ​(Anbindungen) an andere Programmiersprache,​ wie C++ ([[http://​www.gtkmm.org|gtkmm]]), Java (java-gnome),​ Python ([[http://​www.pygtk.org|PyGTK]]), ​C# ([[http://​www.mono-project.com|GTK#​]]im Mono-Projekt) und mehr.+{{:gui:​gtkmm:​gtkmm_logo.png?​80x80 ​|}}Gtkmm ist die C++ Anbindung für GTK+. Im Gegensatz zum originalen GTK+ besitzt GTKmm eine Klassenhierarchie, die die Entwicklung und Weiterentwicklung neuer Widgets stark vereinfachtDie Typensicherheit von GTKmm erleichtert die Programmierarbeit enormBei Einsatz der Gtkmm Bibliotheken werden bereits zur Kompilierung Fehler im Quelltext erkannt was bei der C-Version ​(GTK+) im jetzigen Entwicklungsstadium nicht der Fall ist und deshalb mögliche Programmierfehler erst durch undefiniertes Verhalten auftreten können. 
 +In GTK+ kommen ausschließlich Zeiger zur AnwendungAls C++-Programmierer sollte von Zeigern nur in Ausnahmefällen Gebrauch gemacht werdenstattdessen sollte vermehrt auf Membervariablen zurückgegrifen werden um die Speicherverwaltung zu vereinfachen.
  
-==== Qt ====+Die Gtkmm Bibliotheken sind primär für Unix,- und Linux-Derivate entwickelt worden, die GUI-Programme können aber auch auf Mac OS X und Microsoft Windows ohne größeren Aufwand portiert werden.
  
-Qt ist eine vom norwegischen Unternehmen Trolltech, welches 2008 von Nokia aufgekauft wurde, entwickelte C++ Klassenbibliothek ​für die plattformübergreifende Erstellung von grafischen ​Benutzeroberflächen. Zum Beispiel wurde die Desktopumgebung KDE mit Qt geschrieben,​ wie auch viele Programme, die für KDE entwickelt worden sind.\\  +Gtkmm ist unter der LGPL frei verwendbar. 
-Qt steht unter einem dualen Lizenzsystem, ​dh. dass Qt nur dann frei verwendet werden kann, wenn die Quelltexte offen gelegt ​werden.\\  + 
-Auch für Qt gibt es Bindings an andere Programmiersprachen,​ unter anderem Python, Ruby, C# und Java.+  * Wird verwendet von: Inkscape, GParted 
 +  * Zum [[gui:​gtkmm:​start|Gtkmm-Tutorial]] 
 + 
 +==== Qt (C++) ==== 
 + 
 +{{:​gui:​qt:​qt-logo.jpg?​80x80 |}}Qt (sprich "​cute"​) ​ist eine vom norwegischen Unternehmen Trolltech, welches 2008 von Nokia aufgekauft wurde, entwickelte C++ Klassenbibliothek ​mit der man unter anderem grafische ​Benutzeroberflächen ​erstellen kann. Zum Beispiel wurde die Desktopumgebung KDE mit Qt geschrieben,​ wie auch viele Programme, die für KDE entwickelt worden sind. Qt steht unter einem dualen Lizenzsystem, ​einerseits einer kommerziellen Lizenz und andererseits der LGPL, welche eine Nutzung sowohl in Opensource-Programmen als auch in kommerziellen Programmen erlaubtÄnderungen an der Bibliothek selbst müssen auch weitergegeben ​werden.\\  
 +Die Bibliothek zeichnet sich auch durch ihre Plattformunabhängigkeit aus. Auch für Qt gibt es Bindings an andere Programmiersprachen,​ unter anderem Python, Ruby, C# und Java. 
 + 
 +  * Wird verwendet von: KDE, GoogleEarth,​ VLC, Virtualbox 
 +  * Zum [[frameworks:​qt:​start|Qt-Tutorial]] 
 + 
 +==== wxWidgets (C++) ==== 
 + 
 +{{:​gui:​wxwidgets:​wxwidgets_logo.png?​80x80 |}}wxWidgets,​ früher bekannt als wxWindows, ist eine C++ Bibliothek, mit der ihr GUIs erstellen könnt. Dabei versucht wxWidget sich möglichst als Wrapper für die native GUI des Betriebssystems darzustellen,​ d.h. wxWidgets benutzt keine eigene Benutzeroberfläche,​ sondern benutzt die des Betriebssystems,​ auf dem das Programm kompiliert und ausgeführt wird. wxWidgets ist eine quelloffene Bibliothek und steht unter einer leicht modifizierten LGPL-Lizenz die es erlaubt, die Bibliothek für proprietäre und freie Anwendungen benutzen zu können. Beispiele für Programme, die mit wxWidgets erstellt worden, sind der Audioeditor [[http://​audacity.sf.net|Audacity]] oder die freie Entwicklungsumgebung [[http://​codeblocks.org|Code::​Blocks]]. Auch für wxWidgets existieren Bindings an andere Programmiersprachen,​ darunter Python (wxPython), Perl (wxPerl) und Ruby (wxRuby). 
 + 
 +  * Wird verwendet von: Code::​Blocks,​ Audadcity, Bittorrent 
 +  * Noch kein wirkliches [[gui:​wx:​start|wxWidgets-Tutorial]] 
 +   
 + 
 +===== Zeichnen von GUIs ===== 
 +GUIs können aber auch mit Zeichen-Tools erstellt und in ein Programm eingebunden werden. Qt zum Beispiel liefert dafür das Programm "​Qt-Designer"​ mit. \\  
 +\\  
 +{{user:​nufan:​contest:​firstbirthday:​qt_designer.jpg|Qt-Designer}} 
 + 
 +===== GUI-Designer ===== 
 + 
 +  * [[Glade]] GTK+ (Linux) (Win) (Mac) 
 +  * [[frameworks:​qt:​tools:​designer|Qt-Designer]] Qt (Linux) (Win) (Mac) 
 + 
 + 
 +---- 
 +[[http://​forum.proggen.org/​viewtopic.php?​f=39&​t=855|Diskussion]]
  
-==== wxWidgets ==== 
  
-wxWidgets, früher bekannt als wxWindows, ist eine C++ Bibliothek, mit der ihr GUIs erstellen könnt. Dabei versucht wxWidget sich möglichst als Wrapper für die native GUI des Betriebssystems darzustellen,​ d.h. wxWidgets benutzt keine eigene Benutzeroberfläche,​ sondern benutzt die des Betriebssystems,​ auf dem das Programm kompiliert und ausgeführt wird.\\ ​ 
-wxWidgets ist eine quelloffene Bibliothek und steht unter einer leicht modifizierten LGPL-Lizenz die es erlaubt, die Bibliothek für proprietäre und freie Anwendungen benutzen zu können.\\ Beispiele für Programme, die mit wxWidgets erstellt worden, sind der Audioeditor [[http://​audacity.sf.net|Audacity]] oder die freie Entwicklungsumgebung [[http://​codeblocks.org|Code::​Blocks]].\\ Auch für wxWidgets existieren Bindings an andere Programmiersprachen,​ darunter Python (wxPython), Perl (wxPerl) und Ruby (wxRuby).