PyGTK 3: Mini-GUI-Tutorial mit Python + GTK + 3

Wir werden mit PyGTK 3.0 ein kleines Programm erstellen, das auch für PyGTK 3.4 funktioniert. In dieser kleinen Benutzeroberfläche erfahren Sie, wie Sie ein Programm in zwei oder mehr Dateien aufteilen.

Sie können Sebastian Pölsterls Tutorial zum neuen PyGTK 3 besuchen, hier ist das neue Tutorial, ich lasse den Link:

http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html

Dies ist Sebastians Blog.

http://k-d-w.org/node/88

Eine Kritik an diesem Tutorial von Sebastian ist, dass es nicht lehrt, wie man ein Programm in Teile oder in mehrere Dateien unterteilt. Es wäre gut gewesen, wenn er ein Beispiel gezeigt hätte, wie man es mit PyGTK 3 macht.

Alle großen und komplexen Programme sind in viele Dateien unterteilt, und die Dateien werden sogar in anderen Verzeichnissen abgelegt, dh sie befinden sich in verschiedenen Ordnern.

Beginnen wir mit dem kleinen Beispiel:

Hier ist der Schreibcode in einer einzelnen Datei namens gui.py. Wir öffnen den Gedit-Texteditor oder den Editor, den wir am häufigsten verwenden, kopieren den folgenden Code und speichern ihn als gui.py.

aus gi.repository importieren Gtk-Klasse gui (): def on_open_clicked (Selbst, Schaltfläche): Drucken "\" Öffnen \ "Schaltfläche wurde angeklickt" def on_close_clicked (Selbst, Schaltfläche): Drucken "Anwendung schließen" Gtk.main_quit () def __init__ (self): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk.main_quit) self.box = Gtk.Box () self.window.add (self.box) self. button = Gtk.Button (label = 'Open') self.button.connect ("geklickt", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Close') self.button.connect ("geklickt", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Giebel

def on_open_clicked (self, button): print "\" Open \ "button wurde angeklickt"

Diese Funktion wird im Terminal aktiviert, wenn wir auf die Schaltfläche Öffnen klicken. Das Signal zur Aktivierung lautet:

self.button.connect ("geklickt", self.on_open_clicked) def on_close_clicked (self, button): print "Closing application" Gtk.main_quit ()

Diese Funktion wird aktiviert, wenn wir auf die Schaltfläche Schließen klicken.

Schließen Sie das Programm, das wir ausführen.

das Signal zur Aktivierung ist

self.button.connect ("geklickt", self.on_close_clicked) aus dem gi.repository-Import Gtk ### Wir rufen PyGTK-Bibliotheken auf ### class gui (): ### Klassendefinition namens gui ist die Hauptklasse # ##

Widgets-Deklaration: Ein Widgets ist ein Programm, das von den von uns verwendeten grafischen Schnittstellenbibliotheken vorgegeben wird. Ein Widget ist beispielsweise eine Schaltfläche, ein Fenster, eine Box usw. Dies sind die Widgets, die wir in unserem Programm deklarieren.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Open') ### # open button #### self.button = Gtk.Button (label = 'Close') #### close button #### self.window.add (self.box) #### die box ist enthalten in das Fenster mit dem Namen window #### self.box.pack_start (self.button, True, True, 0) ##### Die Schaltfläche befindet sich in dem Feld mit dem Namen box ### self.window.show_all () ## # wir zeigen das ganze Fenster ### gui = gui () ### erstelle ein gui Objekt ####

Wir platzieren unser Programm in einem Ordner namens simple in unserem Fall auf dem Desktop

fert

Wir öffnen den Ordner mit dem Terminal, in meinem Fall verwende ich Nemo von Linux Mint 14.

geschlossen

Zum Kompilieren setzen wir das Terminal python gui.py ein

siehe das Bild.

Terminal

Jetzt können wir unser kleines Programm oder neues Widget sehen, das mit den PyGTK 3-Bibliotheken erstellt wurde

Es ist ein einfaches Fenster mit zwei Schaltflächen.

Ohne Titel

Jetzt teilen wir das Programm in drei Teile, unten lasse ich den Code der drei Dateien.

Erste gui.py-Datei

aus gi.repository importieren Gtk aus zerstören importieren zerstören aus io importieren io Klasse gui (zerstören, io): def __init __ (self): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk .main_quit) self.box = Gtk.Box () self.window.add (self.box) self.button = Gtk.Button (label = 'Open') self.button.connect ("geklickt", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Close') self.button.connect ("geklickt", self.on_close_clicked) self.box.pack_start ( self.button, True, True, 0) self.window.show_all () Gtk.main () wenn __name__ == '__main__': gui = gui ()

Zweite io.py-Datei

Klasse io: def on_open_clicked (Selbst, Schaltfläche): Drucken "\" Öffnen \ "Schaltfläche wurde angeklickt"

Dritte Datei destroy.py

aus gi.repository importieren Gtk-Klasse zerstören: def on_close_clicked (self, button): print "Anwendung schließen" Gtk.main_quit ()

In unserem Fall legen wir die drei Dateien im selben Ordner ab. Der Ordner heißt einfach geteilt.

einfach

So kompilieren Sie die drei Dateien. Wir öffnen den Ordner mit dem Terminal und legen ihn einfach wieder in das Terminal

python gui.py

Änderungen am gui.py-Code

from destroy import destroy ### Anweisung zum Importieren unserer Datei destroy.py ### von io import io ### Anweisung zum Importieren unserer Datei io.py ### class gui (destroy, io): #### in die Klasse main fügen wir die Unterklassen destroy und io #### hinzu

Sie können sehen, dass der Satz

def on_open_clicked (self, button): print "\" Open \ "button wurde angeklickt"

Es befindet sich nicht in gui.py, sondern in der Datei io.py.

Satz

def on_close_clicked (self, button):

print "Bewerbung schließen"
Gtk.main_quit ()

Es befindet sich in der Datei destroy.py

Auf diese Weise können wir ein Programm in mehrere Dateien aufteilen, die sich gleichzeitig in verschiedenen Verzeichnissen befinden.

Auf der anderen Seite ist Python eine Säule freier Software und für die Arbeit mit GTK 3.6 / 3.8 geeignet. Der Name lautet PyGTK. Pythons Anpassung für KDE heißt PyQT.

Python ist für Mac OS und WINDOWS angepasst.

Ich hoffe, dieses PyGTK3-Mini-Tutorial hat Ihnen geholfen. Sie können alle konstruktiven Kritikpunkte machen, die sie wollen.

Ich kenne auch einige Gtk 3.4 / 3.6 und Vala GTK 3.4 / 3.6.

http://www.youtube.com/watch?v=9ckRn_sx8CE

Schließlich entschuldigen sich KDE-Benutzer dafür, dass sie kein Mini-Tutorial für KDE erstellt haben.


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   rots87 sagte

    In kde bevorzuge ich die Verwendung von kdevelop (ich denke, so heißt es), um die GUI zu erstellen, aber es fällt mir immer noch schwer, die Prozesse zu finden, die dies ermöglichen x s: '(

  2.   Sturmt0il sagte

    Großartig für diejenigen von uns, die Python: D verwenden!

    Viele Grüße!

  3.   Pablo sagte

    Hallo, ich verfolge diese Community schon lange und bin mir nicht sicher, ob ich dies zum ersten Mal kommentiere oder ob ich es bereits zuvor getan habe 😀 (Ich bin nicht sehr begeistert davon, wirklich Kommentare im Web zu schreiben). Die Sache ist, dass ich es tue, um Elav und KZKG ^ Gaara als Administratoren einen Vorschlag zu hinterlassen, und ich denke, es wäre eine gute Idee, ein Plugin für die Syntaxfärbung hinzuzufügen, da ich in letzter Zeit mehr Beiträge mit Code in verschiedenen Programmiersprachen sehe. Ich weiß, dass es einige Plugins gibt, aber ich habe keine ausprobiert, da ich kein WordPress-Benutzer bin. Daher überlasse ich es Ihnen, über die Realisierbarkeit der Anfrage nachzudenken. Ich nutze diese Gelegenheit, um den Rest der Leser zu fragen, was sie von der Idee halten, denn ich weiß, dass es Leute gibt, die es vorziehen, den Code ohne Schmuck zu lesen. Ich entschuldige mich, wenn dies hier bereits kommentiert wurde und aus irgendeinem Grund abgelehnt wurde, da ich mich nicht erinnern kann, eine Diskussion zu diesem Thema gesehen zu haben.

    1.    Marianogaudix sagte

      Die Wahrheit ist, ich hätte gerne die Möglichkeit, die Syntax einzufärben, um den Code der Programmiersprachen hervorzuheben.
      Das würde Benutzern helfen, die Programmiersprachen lernen möchten.

      Aber hey, ich fühle mich auch wohl mit dem Forum und dass wir gemeinsam diskutieren und lernen können.

      1.    eliotime3000 sagte

        GNU Emacs ist komfortabler, da Sie zumindest auswählen müssen, in welchem ​​Programmiersprachenprüfer Sie arbeiten möchten (wenn Sie nicht mehr Gewicht für Ihren Prozessor wünschen, verwenden Sie GNU Nano und genießen Sie Minimalismus von seiner besten Seite).

        1.    Marianogaudix sagte

          Elio, wir reden über WordPress. Im Blog umgesetzt Desde Linux. Es verfügt nicht über die Funktion, die Buchstaben der Beiträge einzufärben.

          1.    eliotime3000 sagte

            Oh es tut mir leid.

        2.    pandev92 sagte

          Naaa Emacs ist bequem für diejenigen, die 84 Finger XD haben .., normale Menschen, Textkameraden, Sublimetext oder Notepad ++ xd

          1.    eliotime3000 sagte

            Das Unplausible ist, dass man das Tippen nicht gelernt hat, was erforderlich ist, um mit GNU Emacs und seinen Tastaturkürzeln gut umgehen zu können. Darüber hinaus erleichtert Ihnen die Benutzeroberfläche die Verwendung der Menüs (es kann unter Windows verwendet werden, es wird jedoch nicht empfohlen, dies im normalen Modus, sondern im Eingabeaufforderungsmodus zu tun, damit win32 Ihr Skript nicht boykottiert).

  4.   Kritiker sagte

    Sehr cooles Tutorial. Der Python-Quellcode ist übrigens nicht kompiliert, sondern eine interpretierte Sprache.

    1.    giskard sagte

      Es kann zu Pseudocode kompiliert werden. Es ist nicht die Maschinensprache, sondern die Bytes, die für den Interpreter etwas darstellen, aber der Prozess wird auch als kompiliert bezeichnet. In diesem Sinne kann man sagen, dass etwas kompiliert ist.

  5.   hty sagte

    Vielleicht ist es besser, pytgk2 zu lernen, da die neueste Version für Windows 2.24 ist. Serie 3 fällt durch ihre Abwesenheit auf. Und die schlechten Zungen sagen, dass der Gnom in jeder neuen Version alle Apis bricht.

    1.    Marianogaudix sagte

      Ich programmiere ein Modell mit GTK 3.4 / 3.6 und die Wahrheit ist, dass sie Ihre Geduld und Ihren Kopf brechen. Sie müssen den Code neu schreiben. Jetzt verstehe ich, warum sich die Linux Mint-Leute über GTK und das GNOME-Projekt beschweren.
      Für diejenigen von MINT stimme ich GTK 2.4 zu, dass dies nicht geschehen ist.

  6.   Carlos sagte

    Gutes Tutorial und Referenzen.
    Nur ein Detail, da Code eingegeben wurde, sind in Python Einrückungen obligatorisch und sollten im Beispielcode beachtet werden.

    Viele Grüße!

    1.    Marianogaudix sagte

      Können Sie erklären, woraus die obligatorischen Identifikationen in Python bestehen? Um ehrlich zu sein, ich habe das noch nie gehört. Ich bin schlecht an die PyGTK 2/3 Foren auf Englisch gewöhnt und übersehen sie vielleicht.

      1.    giskard sagte

        In Python verwenden Sie keine Schlüssel wie in C oder Start- / Endblöcke wie in Pascal, aber alles wird durch den Einzug verstanden, den Sie dem Code geben. Das heißt, die Blöcke werden durch Einrücken erkannt. Es ist eine Funktion, die ich besonders liebe. Sie vermeiden es, Schlüssel und ähnliches zu schreiben.

        1.    pandev92 sagte

          Ich mag das einfach nicht, es scheint einfacher zu sein, zwei kleine Schlüssel oder ein std :: endl; zu setzen, als gesehen zu werden, wenn die xd-Zeile gut tabellarisch ist

          1.    Felipe sagte

            : p Ihr ​​Programmierlehrer wird eine 0 für Sie setzen. Oder schlimmer noch, sie werden dich von deinem Job entlassen. Am wichtigsten ist, dass der Code mit allem, was dazu gehört, lesbar ist

          2.    pandev92 sagte

            Wenn ich mit schließenden Klammern ende, bin ich viel besser lesbar.

          3.    giskard sagte

            Ernsthaft???


            int main(int argc, char *argv[]){program_name = argv[0];while ((argc > 1) && (argv[1][0] == '-')) {switch (argv[1][1]) {case 'v':verbose = 1; break;case 'o':out_file = &argv[1][2];break;case 'l':line_max = atoi(&argv[1][2]);break;default:fprintf(stderr,"Bad option %s\n", argv[1]);usage();}++argv;--argc;} if (argc == 1) {do_file("print.in");} else {while (argc > 1) {do_file(argv[1]);++argv;--argc;}}return (0);}

            Siehst du? Ohne Einrückungen ist es nicht sehr gut verstanden. Und das ist einfach. Bei einem komplexeren versteht es nur der Compiler. Die Sache ist, da Sie sowieso einrücken MÜSSEN (damit Menschen den Code verstehen), warum müssten Sie redundant sein und Trennzeichen verwenden? Genug mit Einrückung und das wars.

          4.    pandev92 sagte

            Natürlich wird nichts verstanden, da Sie die Regeln für gutes Schreiben für ein Programm in c / c ++ nicht einhalten. Was Sie getan haben, gilt für alles, wie das Verschachteln einer Funktion in einer Funktion in einer anderen Funktion, die sich in einer anderen befindet. Dann möchte ich Sie xd sehen, wenn Sie es verstehen können.

          5.    pandev92 sagte

            Übrigens, mit zwei Looks ist dieser Code leicht verständlich xD

          6.    giskard sagte

            Was ich getan habe, habe ich absichtlich getan, um Ihnen zu zeigen, dass es ohne Einrückung, obwohl es kompiliert wird, äußerst schwierig ist, Code zu verstehen. Sie haben also zwei Regeln: Einrücken und Begrenzen mit Trennzeichen. Das ist aber überflüssig. In Python wird ein solcher Code vom Interpreter einfach nicht akzeptiert. Und Sie haben nur eine Regel: Einzug. Einfach.
            Aber hey, jeder mit seinem Geschmack.

          7.    Atheios sagte

            Beide sind gut, eingerückt und nicht eingerückt. Meiner Meinung nach bevorzuge ich den Semikolonstil oder Rubin, ähnlich wie Python, aber die Einrückung ist nicht erforderlich.

            So wird es besser verstanden: P:

            echo 'int main (int argc, char * argv []) {Programmname = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {switch (argv [ 1] [1]) {case 'v': verbose = 1; break; case 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; default: fprintf (stderr, »Ungültige Option% s \ n », argv [1]); usage ();} ++ argv; –argc;} if (argc == 1) {do_file (" print.in ");} else {while (argc> 1) { do_file (argv [1]); ++ argv; –argc;}} return (0);} '| perl -p -es / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g; '

            Grüße 😀

      2.    giskard sagte

        Ich denke, Carlos bedeutet, dass dort, wo der Code herauskommt, keine Einrückungen vorhanden sind. Das mit Kopieren und Einfügen funktioniert einfach nicht. Ich weiß nicht, ob das Tag beim Erstellen eines Beitrags vorhanden ist Sprachcode eingeben. Es wäre gut, wenn sie es sagen würden, wenn es nicht existiert.

        1.    giskard sagte

          Ich habe bereits gesehen, was das Problem ist: Das CODE-Tag entfernt alle Leerzeichen und Tabulatoren (das sollte es nicht tun !!!). Aber wenn Sie einen nbsp darauf setzen, sieht der Code gut aus. A0 in hex (160 in dec), obwohl ich denke, dass es von der Schriftart abhängen könnte (ich weiß es nicht). Wenn es verwendet wird, kommt es wie folgt heraus:

          def fib(n):
              a, b = 0, 1
              while a < n:
                  print(a)
                  a, b = b, a+b

          Was in meinen Tests gut aussieht, aber ich habe keine Vorschau, wenn ich Antworten poste (und das sollte es geben !!!). Wenn es nicht herauskommt, ist es nicht meine Schuld 😉

          1.    Marianogaudix sagte

            Schauen Sie sich die Beispiele an, die Sebastian Pölsterl in sein PyGTK 3-Tutorial aufgenommen hat. Sebastian platziert keine Labels.

            Beispiel:

            http://python-gtk-3-tutorial.readthedocs.org/en/latest/entry.html#example

            Sie können das gesamte Tutorial von Sebastian sehen.

          2.    giskard sagte

            Ich weiß nicht was du meinst. Was ich damit sagen will ist, dass es hier in den Beiträgen nicht möglich ist, das HTML-Tag "CODE" zu verwenden, damit das, was Sie als Code eingeben, gut eingerückt herauskommt. Wenn Sie auf der Seite, auf die Sie verweisen, die Quellen der Seite sehen, werden Sie feststellen, dass sie keinen CODE verwendet, sondern andere HTML-Trennzeichen.
            Es ist nicht gegen den Code, den Sie eingeben, sondern weist auf einen Fehler im Posting-System dieser Site hin. Was Admins vielleicht beheben können.
            Wenn ich über Tags spreche, spreche ich offensichtlich über HTML, nicht über Python. In jedem Fall funktioniert es einfach nicht, wenn Sie Code ohne Einrückung in Python einfügen. Wenn ein Neuling kommt und den Code so kopiert, wie er in diesem Beitrag erscheint, und versucht, ihn auszuführen, schlägt er fehl. Sie können frustriert sein, als Sie ein Neuling sind. Auch hier liegt der Fehler nicht bei Ihnen. und in meiner unmittelbaren vorherigen Antwort gab ich einen Weg, um das Problem auf der Ebene der Benutzer, die Beiträge verfassen, zu lösen.

          3.    Marianogaudix sagte

            Sie haben absolut Recht, ich hätte Fotos hochladen sollen, anstatt den Code zu kopieren.
            um zu zeigen, wie Anweisungen in PyGTK 3 richtig angeordnet sind.

  7.   Felipe sagte

    Zum Programmieren mit Python empfehle ich die Verwendung von Eclipse mit dem PyDev-Plugin oder dem Pychar m

  8.   Ludwig sagte

    Wie oben erwähnt, mag ich Python wegen der Einkerbungen nicht. Wie wir gesehen haben, funktioniert das Kopieren und Einfügen nicht, was bei anderen Sprachen wie C, Java, PHP usw. nicht der Fall ist.

    Zur Lesbarkeit wenden wir einen Code-Verschönerer an (wie http://indentcode.net/ ) und fertig,

    Das Hässliche ist behoben, aber wenn es keine Einrückung gibt und die Logik geändert wird, klingen wir ...

  9.   Carlos sagte

    Ich bin neu bei PyGTK. Ist es möglich, mit Shell-Skripten in dieser Sprache zu interagieren?

    1.    Hallo sagte

      Danke für das Tutorial.

      Grüße.