Hi, mit der Suche habe ich ne Menge Anfängertipps und Beispiele gefunden. jedoch nichts, was mir die Entscheidung abnimmt, mit welchem Tollkit ich am besten anfangen sollte.
Ich habe bisher nur Pythonscripts geschrieben, die von cron angeschoben werden um dann irgendwelche Aufgaben zu eledigen. Das ist soweit auch ganz gut, jedoch möchte ich nun einen Schritt weiter gehen und bin auf viele neue Dinge gestoßen. Am Ende soll irgendwann mal ein kleines Tool kommen, das z.B. jede halbe Stunde von wetter.com für vorher definierte Orte die Temperatur zieht. Das ist ja kein Problem, mit nem Script und cron hab ich sowas auch schonmal realisiert, jedoch ist das ja doof, wenn man zum nach schauen dauernd ne PHP Seite gehen und die Sachen von Hand aktualisieren muß. Ganz übel wird es, wenn es nicht um Wetterdaten sondern um andere Daten wie Börsenkurse handelt, die sich viel öfters aktualisieren und auch ausgewertet werden wollen. Ok, soweit das, wo ich mal hin will Ich will ja ganz klein anfangen. Grosse frage am Anfang, wxWidgets oder TK Inter. Ich hab gelesen, dass TKInter kein echtes Tabellen Widgeht hat (so Excel mäßig). Auch so tendiere ich mehr zu wxWidgets. Das eizige das mich bei TK hält, ist die Tatsache, dass es bereits bei Python dabei ist.
Wenn ich nun was mit wxWidgets baue, wie geh ich das adnn am besten an? Beispiel, ich will nen Fenster und darin immer die aktuelle Uhrzeit anzeigen, muss ich dann nen extra Thread für das Anzeigen der Uhrzeit bauen, der sich dann quasi immerwieder selbst aufruft oder wie macht man das am dümmsten?
wär nett, wenn mir da jemand ein paar Tipps für den start mit auf den Weg geben könnte.
danke, Aureliusus
Anfängerfragen bezüglich GUI
Ja, Tkinter kommt an seine Grenzen wenn du ein TabellenWidget brauchst.
Im Moment benutze ich selbst:
http://www.python-forum.de/viewtopic.php?p=32776#32776
bzw:
http://spuddel.sp.funpic.de/dokuwiki2/d ... ontolister
das ist ein Grid aus Labeln auf einem ScrolledFrame aus dem Paket PMW (ist extra zu installieren)
cu Sebastian
Im Moment benutze ich selbst:
http://www.python-forum.de/viewtopic.php?p=32776#32776
bzw:
http://spuddel.sp.funpic.de/dokuwiki2/d ... ontolister
das ist ein Grid aus Labeln auf einem ScrolledFrame aus dem Paket PMW (ist extra zu installieren)
cu Sebastian
Wenn es um eine generelle Frage bzgl. GUI geht, würde ich mir an Deiner
Stelle auf jedenfall überlegen, ob nicht auch eine browserbasierte Lösung,
sprich die Erstellung der Oberfläche mit HTML und CSS (XHTML), in Frage
kommt. Es kommt vielleicht die eine oder andere technische Hürde hinzu,
dafür hast Du es aber gerade mit dem dynamischen generieren von z.B.
Tabellen deutlich einfacher und Probleme mit dem Drucken hast Du auch
keine .
Tabellar
Stelle auf jedenfall überlegen, ob nicht auch eine browserbasierte Lösung,
sprich die Erstellung der Oberfläche mit HTML und CSS (XHTML), in Frage
kommt. Es kommt vielleicht die eine oder andere technische Hürde hinzu,
dafür hast Du es aber gerade mit dem dynamischen generieren von z.B.
Tabellen deutlich einfacher und Probleme mit dem Drucken hast Du auch
keine .
Tabellar
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Aureliusus!Aureliusus hat geschrieben:Auch so tendiere ich mehr zu wxWidgets.
Ich habe mich eine Weile mit Tkinter gespielt und derzeit programmiere ich GUI-Programme noch mit pyGTK. Aber nur deshalb, weil ich noch nicht dazugekommen bin mich in wxPython einzuarbeiten. Tkinter bietet mir zu wenige Möglichkeiten. Ich bin schon nach wenigen Wochen an die Grenzen gestoßen. pyGTK hat eine schöne API und ist nicht schlecht dokumentiert (auf Englisch). Leider bewegt sich pyGTK ziemlich weit unten auf der Stufe der Bequemlichkeit --
Was ich damit sagen will? Ganz einfach. Es gibt kein eingebautes Tabellen-Widget. Einen einfachen Dialog (z.B. eine Inputbox) musst du dir mühsam aufbauen. Aber genau so etwas braucht man doch ziemlich oft. Aber der wichtigste Punkt der mich demnächst zu wxPython bringen wird ist das Thema "Drucken". wxPython bietet sogar eine Druckvorschau, die mit wenigen Zeilen Code aktiviert werden kann. Es gibt fertige Dialogfenster zur Dateiauswahl, zur Druckerauswahl, usw. Es gibt eine Vielzahl von vorgefertigten Widgets, die unter allen unterstützten Betriebssystemen ziemlich gleich aussehen.
Auch ein wichtiger Punkt, wie mir scheint, wxPython-Programme sind unter Windows viel schneller offen als pyGTK-Programme. Das ist sehr wichtig, wenn man Python für einfache Dialoge braucht, die von einem anderen Programm aus aufgerufen werden. Ich möchte zum Beispiel ein vorhandenes Visual Basic Programm mit Python um einige Funktionen erweitern. Das macht aber keinen Spaß, wenn jedesmal, wenn man im VB-Programm einen Knopf druckt, man ein paar Sekunden warten muss, bis sich das pyGTK-Programm dazu bereit erklärt zu erscheinen. Diese Zeit scheint mir bei wxPython-Programmen kürzer zu sein.
Demnächst kommt ein Buch heraus, leider noch auf Englisch, das in die wxPython-programmierung einführt. Mein Tipp: Kaufe es und arbeite dich in wxPython ein. Noch ein Tipp: Schau dir mal die Beispiele an, die du hier http://wxpython.org/download.php herunterladen kannst. Dann hast du einen Überblick, was man alles so mit wxPython machen kann. Vergleiche die Beispiele mit pyGTK und Tkinter. Dann entscheide.
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Möchte gerne unterstreichen, was Gerold schrieb. Aber ein kleiner Nachtrag sei gestattet: Das Buch ista bereits erschienen, nennt sich "WxPython in Action" und ist bei Manning Publications erschienen - leider nicht ganz billig. Also besser vorher mal die wxPython-Beispiele anschauen.gerold hat geschrieben: Demnächst kommt ein Buch heraus ...
Gruß,
Christian
PS Meines ist heute angekommen. Bin schon ganz neugierig ...
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Christian!CM hat geschrieben:Das Buch ista bereits erschienen
Danke für den Hinweis. Habe es soeben bestellt. Hoffentlich reicht mein Englisch für dieses Buch.
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Ich habe mich entschlossen einfach mal alle Gui Toolkits auszuprobieren und mir dann eines auszusuchen.
Im Moment bin ich dabei mir Tkinter anzuschauen.
Tkinter finde ich für kleine Tools genau richtig und charmant hässlich :-)
Auch WxWidgets werde ich mir anschauen, allerdings bin ich von denen nicht besonders überzeugt. Auf meinem debian System ist PyWx schrecklich langsam und meinen Tests zu Folge auch instabil, was aber auch an den Programmen selber liegen kann.
Ich freue mich auf meine Versuche mit pyQT. Widgets sind zu genüge vorhanden, Doku scheint auch brauchbar.
Bis ich bei qt ausprobiert habe, gibt es auch eine kostenlose Windowsversion (mit qt4)
Im Moment bin ich dabei mir Tkinter anzuschauen.
Tkinter finde ich für kleine Tools genau richtig und charmant hässlich :-)
Auch WxWidgets werde ich mir anschauen, allerdings bin ich von denen nicht besonders überzeugt. Auf meinem debian System ist PyWx schrecklich langsam und meinen Tests zu Folge auch instabil, was aber auch an den Programmen selber liegen kann.
Ich freue mich auf meine Versuche mit pyQT. Widgets sind zu genüge vorhanden, Doku scheint auch brauchbar.
Bis ich bei qt ausprobiert habe, gibt es auch eine kostenlose Windowsversion (mit qt4)
Hallo,
also ich benutze ausschließlich wxPython und bin (bis jetzt) an noch keine Grenzen gestoßen. Jedem der mit wxPy arbeiten will (und noch nicht viel Erfahrung damit hat) empfehle ich 2 Dinge:
a) unbedingt das Demo-Toolkit auf der offiziellen wx Seite laden
b) für schreibfaule wie mich VisaulWX installieren, damit bekommt man das Grundgerüst in null-komma-nix zusammen
also ich benutze ausschließlich wxPython und bin (bis jetzt) an noch keine Grenzen gestoßen. Jedem der mit wxPy arbeiten will (und noch nicht viel Erfahrung damit hat) empfehle ich 2 Dinge:
a) unbedingt das Demo-Toolkit auf der offiziellen wx Seite laden
b) für schreibfaule wie mich VisaulWX installieren, damit bekommt man das Grundgerüst in null-komma-nix zusammen
-
- User
- Beiträge: 9
- Registriert: Mittwoch 5. April 2006, 10:23
Danke für all eure Antworten
Nach all den Empfehlungen werde ich wohl bei den wxDemos anfangen und die eingehend Studieren. Wie es dann mit der Stabilität ausschaut werd ich ja dann sehen.
Wegen dem Uhrzeit Beispiel was ich oben mal angesprochen habe, ist das da das richtige herangehen mit den Threads oder ist das dann mehr wie mit Kanonen auf Spatzen schießen? Ich bin mir noch nicht ganz im Klagen darüber wie das mit den GUI Toolkits funktioniert. Das sind ja keine Scripts die einmal durchlaufen und dann beendet sind. Und wenn ich das aktualisieren der Uhrzeit in der "Hauptschleife" mit time.sleep() aufhalte, dann bremse ich ja auch den Rest von meinem Programm aus.
Najoa, vielleicht wird mir das ja auch gleich in den wx Beispielen erklärt, ich schau mir die jetzt besser erstmal an.
Nach all den Empfehlungen werde ich wohl bei den wxDemos anfangen und die eingehend Studieren. Wie es dann mit der Stabilität ausschaut werd ich ja dann sehen.
Wegen dem Uhrzeit Beispiel was ich oben mal angesprochen habe, ist das da das richtige herangehen mit den Threads oder ist das dann mehr wie mit Kanonen auf Spatzen schießen? Ich bin mir noch nicht ganz im Klagen darüber wie das mit den GUI Toolkits funktioniert. Das sind ja keine Scripts die einmal durchlaufen und dann beendet sind. Und wenn ich das aktualisieren der Uhrzeit in der "Hauptschleife" mit time.sleep() aufhalte, dann bremse ich ja auch den Rest von meinem Programm aus.
Najoa, vielleicht wird mir das ja auch gleich in den wx Beispielen erklärt, ich schau mir die jetzt besser erstmal an.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Aureliusus!Aureliusus hat geschrieben:Wegen dem Uhrzeit Beispiel was ich oben mal angesprochen habe, ist das da das richtige herangehen mit den Threads oder ist das dann mehr wie mit Kanonen auf Spatzen schießen?
Wer sich an grafische Anwendungen herantrauen will, der muss früher oder später mit Threads arbeiten. Aber Threads sind gar nicht so schlimm wie viele annehmen. Folgender einfache Timer ist ja auch schon ein eigenständiger Thread. Man muss nur wissen: Wenn irgendetwas die GUI blockiert, dann muss es in einen anderen Thread ausgelagert werden. Fertig.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
import time
from threading import Timer
class MainWindow(wx.Frame):
def set_clock(self):
try:
self.lab_clock.SetLabel(time.asctime())
Timer(1, self.set_clock).start() # Jede Sekunde neu aufrufen
except:
pass
def __init__(self):
wx.Frame.__init__(
self,
None,
wx.ID_ANY,
"Hallo Welt",
size=(200,100),
style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE
)
self.lab_clock = wx.StaticText(self, -1, "[Uhrzeit]")
self.set_clock()
self.Show(True)
app = wx.PySimpleApp()
frame = MainWindow()
app.MainLoop()
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
... vollkommen richtig, wirst du an einem Thread nicht vorbei kommen.Aureliusus hat geschrieben: Und wenn ich das aktualisieren der Uhrzeit in der "Hauptschleife" mit time.sleep() aufhalte, dann bremse ich ja auch den Rest von meinem Programm aus.
@gerold:
schönes Beispiel mit dem Timer, die Methode kannte ich noch gar nicht, hab ich auch direkt mal ne frage zu:
wird durch den Aufruf aus einem Thread heraus die Methode set_clock auch im selbigen ausgeführt oder im Haupt-Thread? Im ersten Fall würde das nämlich unendlich viele Threads öffnen - aber kann ich mir eigentlich nicht vorstellen.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Buell!Buell hat geschrieben:wird durch den Aufruf aus einem Thread heraus die Methode set_clock auch im selbigen ausgeführt oder im Haupt-Thread? Im ersten Fall würde das nämlich unendlich viele Threads öffnen - aber kann ich mir eigentlich nicht vorstellen.
Das glaube ich nicht, da die Funktion ja nicht aufgehalten wird. Sie beendet sich direkt nach dem Starten des neuen Threads und nicht erst, wenn der gestartete Thread abgearbeitet ist.
Nichtsdestotrotz (schweres Wort) bin ich drauf gekommen, dass mein Beispiel nicht unter Linux mit wxPython 2.6.1 funktioniert. Deshalb habe ich es so umgeschrieben, wie es, wie ich glaube, von den Entwicklern von wxPython vorgesehen wurde.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx
import time
class MainWindow(wx.Frame):
def on_timer(self, event):
self.lab_clock.SetLabel(time.asctime())
def __init__(self):
wx.Frame.__init__(
self,
None,
wx.ID_ANY,
"Hallo Welt",
size=(200,100),
style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE
)
self.lab_clock = wx.StaticText(self, -1, "[Uhrzeit]")
# Timer erstellen, Event an Funktion binden und Timer starten
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)
self.timer.Start(1000)
self.Show(True)
app = wx.PySimpleApp()
frame = MainWindow()
app.MainLoop()
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 9
- Registriert: Mittwoch 5. April 2006, 10:23
Ich hab mich noch garnicht für das tolle Beispiel bedankt. Vielen Dank für die Mühe, das script hat mir wirklich weiter geholfen
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Das freut mich.Aureliusus hat geschrieben:Vielen Dank für die Mühe, das script hat mir wirklich weiter geholfen
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.