Halihallo Christoph
Meine Erfahrungen mit Perl/Tk sind zwar etwas vorhanden, halten sich jedoch in beträchtlichen Grenzen...
Mit dem Tk-Modul in PERL habe ich mich lange nicht mehr beschäftigt, aber dafür mit TCL/Tk - und aus dieser Sprache kommt ja das, was das PERL-Modul umzusetzen veraucht.
Ist eh alles das selbe :-)
Ob nun Perl oder TCL spielt ja eine nebensächliche Rolle :-)
Nur weiss ich nicht, wie ich Frames mal sichtbar mal unsichtbar darstellen kann
Das erledigt der "Packer" für dich, bzw. der Geometriemanager. "expand" und "fill" sind Optionen, die deinem Frame oder Label eine Größe geben. Und nichts hindert dich, in ein "MainWindow" mehrere Widgets einzubauen, siehe perldoc Tk::MainWindow.
Letzteres ist klar. Bei Ersterem bin ich mir dessen noch nicht sicher, wie ich es
umsetzen kann. Die Perl-Doku (TCL wirds das selbe sein, da beide auf (etwa) die selbe
Library zurückgreifen) besagt:
--------------------------------------------------------------------------------------
-expand => boolean
Specifies whether the slave should be expanded to consume extra space in their
master. Boolean may have any proper boolean value, such as 1 or no. Defaults to 0.
-fill => style
If a slave's parcel is larger than its requested dimensions, this option may be used
to stretch the slave. Style must have one of the following values:
none
Give the slave its requested dimensions plus any internal padding requested with -
ipadx or -ipady. This is the default.
x
Stretch the slave horizontally to fill the entire width of its parcel (except leave
external padding as specified by -padx).
y
Stretch the slave vertically to fill the entire height of its parcel (except leave
external padding as specified by -pady).
both
Stretch the slave both horizontally and vertically.
--------------------------------------------------------------------------------------
Falls also "-expand 0 -fill none" gesetzt wird, hat das Widget immer noch eine Grösse,
zwar die Minimale, aber dennoch: sichtbar ist es. Zumindest im Geometrymanager pack
habe ich bisher keine Möglichkeit gefunden ein Widget temporär als "invisible" also
unsichtbar zu kennzeichnen :-(
Meine Frage: Wie könntet Ihr euch eine OOP-Umsetzung eines Tk-GUI-Programmes vorstellen?
Du kannst dir einzelne Widgets als "Module" definieren. TCL/Tk ist von seinem Wesen her ereignisorientiert, das Konzept für OOP heißt "incr TCL" bzw. "incr Tk" - schau mal, ob du dazu was findest.
Hm. Im Perl ist Tk auch Ereignisorientiert und wird's auch immer bleiben. Ich weiss noch
nicht genau, was ich dem [incr Tk] abgewinnen kann, aber es seint nicht das zu sein,
was ich mir vorstelle, obwohl man kann von den Widgets erben und sie erweitern, das ist
schon mal ein Schritt in die richtige Richtung. Mir geht es darum, dass Tk gar nicht
separat steht, sondern voll in den Programmfluss einläuft... Ich habe schon mal etwas
getestet, scheint ganz gut zu funktionieren. Design und Funktionalität in einem Modul
zu vereinen.
Du solltest dir vielleicht zum Vergleich mal TCL/Tk holen, das bekommst du entweder von http://www.activestate.com/Products/Download/Download.plex?id=ActiveTcloder von http://dev.scriptics.com/software/tcltk/downloadnow84.tml. Bei den dort mitgelieferten Beispielen gibt es bei den "iwidgets" (für "incr widgets", also OOP) mit "tabnotebook" eins, das deinen Wünschen sehr nahe kommen dürfte und als Vergleich für eine Umsetzung in PERL/Tk sicher ein paar brauchbare Hinweise enthält.
Hm. Vielen Dank für den Tipp.
Wie habt ihr es evtl. schon gelöst? - Was haltet Ihr von meinem Vorschlag?
Ich habe mich seit mehr als einem Jahr nicht mehr mit PERL/Tk beschäftigt, weil ich zwar auf dem Server umfangreiche und ansprechende GUI-Lösungen zusammenbauen konnte, die aber nicht "reansportierbar" waren. Das war zumindest bei Perl 5.6 so - und was nutzt es, wenn mir der Besuch eines "users" auf dem Server die schönsten Widgets aufruft, er sie aber nicht zu sehen bekommt? Wenn du mir sagen kannst, wie ein "user" übers Internet das gewünschte GUI auch auf seinen Monitor bekommen kann, ohne selbst PERL installiert haben zu müssen (dann funktioniert das ganz gut), klemme ich mich nochmal dahinter - ich halte nämlich Tk für eine ausgesprochen feine Sache.
Uha, was hast du denn da vor :-)
Nun, HTTP eignet sich dafür eigentlich schlecht, denn du brauchst eine bidirektionale
Verbindung mit dem, meinetwegen Perl/Tk-Server; das ist über HTTP wenn, dann nur
ineffizient lösbar. Auch wenn du es schaffen würdest, Events über die Verbindung zu
senden, so musst du noch eine Möglichkeit finden, das aktuelle Fenster über die
Verbindung zurückzusenden, sodass der Client (Browser) es darstellen kann (vorzugsweise
Graphik). Dafür kenne ich leider keine Technik/Programm (ich würde es mir auch wünschen
:-)). Das was dem am nächsten kommt sind die ASP, Application Service Providers. Da hat
man z.B. Outlook Express auf dem Server laufen und mehrere Clients greifen
über diesen Provider darauf zu. Der ASP liest dann den Fensterinhalt aus und liefert sie
dem Client als HTML-File (wahrscheinlich bestehend aus diversen Bildern) zurück.
Ob und wo es etwas derartiges für Perl/Tk gibt, weiss ich leider nicht.
Viele Grüsse und Danke
Philipp
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.