Das deutsche Python-Forum

10 Jahre Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Mittwoch 27. August 2014, 19:02

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Montag 5. März 2012, 23:55 
User

Registriert: Montag 5. März 2012, 23:08
Beiträge: 13
Wohnort: Styria
Hallo liebe Community!

Ich habe folgendes Problem:

Wenn die "Funktion Command" in der Klasse "MainApp" ist, wird in meiner TextView der Befehl "cmd" und das Resultat "output" von "cmd" angezeigt
http://pastebin.com/EKZJtug4

wenn aber die "Funktion Command" außerhalb der Klasse ist, funktioniert es nicht - ich erhalte auch keine Fehlermeldung
http://pastebin.com/49hPST4t

Ich würde die Funktion gerne außerhalb der Klasse haben da ich sie in anderen Dateien später auch brauchen werden :)

Danke für eure Hilfe!

greetz


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Dienstag 6. März 2012, 00:19 
Moderator

Registriert: Mittwoch 26. Januar 2005, 00:29
Beiträge: 23288
@sh4nks: Im zweiten Beispiel erzeugst Du zwei verschiedene Exemplare von `MainApp` und operierst in der `Command` auf einem anderen als dem was als erstes erzeugt wird.

Die Namensgebung und der Code insgesamt sehen so als, als wenn Du Dich erst noch ein wenig mit objektorientierter Programmierung (OOP) befassen solltest, bevor Du GUIs in Angriff nimmst.

_________________
“From the programmer's perspective, indentation implies program flow in nearly all modern languages. The difference is that in Python the compiler believes you.” — Dave Brueck in c.l.p


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Dienstag 6. März 2012, 00:26 
User

Registriert: Montag 5. März 2012, 23:08
Beiträge: 13
Wohnort: Styria
Jap, befasse mich erst seit kurzem mit OOP :)
Habe mir aber heute schon ein Buch zu objektorientierter Programmierung mit Python bestellt und solange ich warte will ich mir die Zeit mit GUI-Programmierung vertreiben. :)

Das hab ich vergessen auszubessern im Pastebin:
  1. if __name__ == "__main__":
  2.     StartMainApp = MainApp()
  3.     StartMainApp.main()
Highlighting by GeSHi


Wäre trotzdem sehr dankbar wenn einer eventuell weiß woran das liegt ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Mittwoch 7. März 2012, 08:19 
Administrator
Benutzeravatar

Registriert: Freitag 20. Juni 2003, 17:30
Beiträge: 15923
Naja, erstmal: wo bleibt das Minimalbeispiel? Selbst wenn ich deinen Code ausbessere kommt ein ``AttributeError`` weil natürlich ``MainApp`` keine ``main``-Methode hat. Woher auch. Und selbst wenn, dann würde auch das nicht klappen, da du die Builder-Datei nicht mitlieferst. Ab dem Punkt wird mir das zu viel Arbeit deinen Code auszubessern damit er überhaupt läuft um dann dein eigentliches Problem zu lösen. Paste doch mal ein Minimalbeispiel am besten als Gist hier, insbesondere wenns mehrere Dateien sind. Dann kann man das simpel runterladen und ausprobieren.

Und BlackJack hat das auch schon angedeutet. Du solltest erstmal etwas über OOP lernen. Der Grund warum Command nicht funktioniert ist simpel. Weil du in Zeile 30 in ``GetBuffer`` ein zweites ``MainApp``-Objekt anlegst, was natürlich mit dem ersten überhaupt nichts zu tun hat. Dort setzt du dann die Ausgaben, aber bringen tut das halt nichts, weil dein eigentliches ``MainApp``-Objekt bekommt davon nichts mit. Du musst ``Command`` daher eine Referenz auf dein ``MainApp``-Objekt mitgeben. Normalerweise würde man das mit nem Button lösen, statt mit einer Funktion ``Test`` und dann bekommt die Callback-Funktion vom ``Button`` eine Referenz auf den Button der gedrückt wurde mit und man kann darüber dann die anderen Widgets erreichen. Ich würde dir das an deinem Code demonstrieren, aber der ist ja nicht lauffähig.

_________________
My god, it's full of CARs! | Leonidasvoice vs Modvoice


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Mittwoch 7. März 2012, 11:22 
User

Registriert: Montag 5. März 2012, 23:08
Beiträge: 13
Wohnort: Styria
Hab jetzt das Beispiel bei gist hochgeladen:
Link

Wäre nett wenn du mir zeigst wie das geht :)

mfg


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Mittwoch 7. März 2012, 14:17 
Administrator
Benutzeravatar

Registriert: Freitag 20. Juni 2003, 17:30
Beiträge: 15923
sh4nks hat geschrieben:
Wäre nett wenn du mir zeigst wie das geht :)

OK, hier. Hab auch paar Sachen umbenannt, die ich sinnlos fand. Da gäbs an dem Code noch einiges zu ändern, aber hab mich jetzt mal hauptsächlich auf dein Problem konzentriert.

Und huch, bei Gist kann man sich keine Diffs anzeigen lassen? Das finde ich ja sehr schwach, hab eigentlich auf dieses Feature gehofft.

_________________
My god, it's full of CARs! | Leonidasvoice vs Modvoice


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Mittwoch 7. März 2012, 20:45 
User

Registriert: Montag 5. März 2012, 23:08
Beiträge: 13
Wohnort: Styria
Herzlichen Dank! :)

So wie ich das jetzt mitbekommen habe wird das "app" dann durch "self" ersetzt oder?
Sry für diese komische Ausdrucksweise^^

Wie "formatiert" man eigentlich Code?
Schreibt man bei Klassen den ersten Buchstaben groß und die Methoden darin klein?
Würde mich über Tipps freuen ;)

mfg


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Mittwoch 7. März 2012, 22:36 
Moderator
Benutzeravatar

Registriert: Freitag 4. August 2006, 15:56
Beiträge: 6626
Wohnort: Hamburg
sh4nks hat geschrieben:
Wie "formatiert" man eigentlich Code?
Schreibt man bei Klassen den ersten Buchstaben groß und die Methoden darin klein?
Würde mich über Tipps freuen ;)

Google mal nach "PEP8" - und lies Dir das durch. Das ist der offizielle Styleguide, an den man sich wenn möglich halten sollte. :-)

_________________
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Folien & Text inkl. Python3))


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Donnerstag 8. März 2012, 16:22 
Administrator
Benutzeravatar

Registriert: Freitag 20. Juni 2003, 17:30
Beiträge: 15923
sh4nks hat geschrieben:
So wie ich das jetzt mitbekommen habe wird das "app" dann durch "self" ersetzt oder?
Sry für diese komische Ausdrucksweise^^

Nein. Die Methoden der Klasse bekommen implizit im Parameter ``self`` eine Referenz auf die Instanz der Klasse ``MainApp``. Diese Instanz leite ich einfach weiter an die andere Methode damit sie Zugriff hat auf die Widgets. Wie die Parameter heißen ist eigentlich immer ziemlich egal.

Und ja, normalerweise Klassen CamelCase und methoden_mit_unterstrichen. So wie es in dem Code ist, ist es Quark ;)

_________________
My god, it's full of CARs! | Leonidasvoice vs Modvoice


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Text in einen TextBuffer einfügen - PyGObject
BeitragVerfasst: Donnerstag 8. März 2012, 23:47 
User

Registriert: Montag 5. März 2012, 23:08
Beiträge: 13
Wohnort: Styria
Hyperion hat geschrieben:
Google mal nach "PEP8" - und lies Dir das durch. Das ist der offizielle Styleguide, an den man sich wenn möglich halten sollte. :-)

Danke, habs mir mal durchgelesen. Ich werde versuchen, mich so gut wie möglich dran zu halten :)

Leonidas hat geschrieben:
Nein. Die Methoden der Klasse bekommen implizit im Parameter ``self`` eine Referenz auf die Instanz der Klasse ``MainApp``. Diese Instanz leite ich einfach weiter an die andere Methode damit sie Zugriff hat auf die Widgets. Wie die Parameter heißen ist eigentlich immer ziemlich egal.

Und ja, normalerweise Klassen CamelCase und methoden_mit_unterstrichen. So wie es in dem Code ist, ist es Quark ;)

Ah ok, danke für deine Hilfe! :)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de