Forum: PC-Programmierung tcl GUI zur Laufzeit verändern


von kenny (Gast)


Lesenswert?

In einem anderen Beitrag (tcl String Operationen) wurde mit hier bereits 
bestens geholfen.

Nun hänge ich bei folgender Situation:

Eine vorhandene GUI möchte ich nun ein wenig umbauen.
Ich möchte ein Label und Textfeld zur Laufzeit einblenden, wenn der COM 
Port zu einem bestimmten Messgerät erfolgreich geöffnet wurde. Wenn der 
COM Port nicht geöffnet wurde, möchte ich einen Hinweis einblenden.

Bietet tcl hier bereits eine Funktion?

von leo (Gast)


Lesenswert?

kenny schrieb:
> Bietet tcl hier bereits eine Funktion?

Ev. verwendest du Tcl/Tk?
Anyway, der 1. Link in Google "tcl gui" passt schon mal.

leo

von Dirk B. (dirkb2)


Lesenswert?

Du musst ja die Widgets anzeigen lassen.

Dafür gibt es verschiedene Funktionen.
pack, grid, place fallen mir erstmal ein.

Du kannst, je nach Erfolg des Öffnens, an der Stelle die Widgets 
einbauen.

Da gibt es auch Optionen zum löschen.

von Egon D. (Gast)


Lesenswert?

kenny schrieb:

> Eine vorhandene GUI möchte ich nun ein wenig
> umbauen.

Dumme Frage: Womit ist dieses vorhandene GUI realisiert?
Mit Tk?


> Ich möchte ein Label und Textfeld zur Laufzeit einblenden,
> wenn der COM Port zu einem bestimmten Messgerät erfolgreich
> geöffnet wurde. Wenn der COM Port nicht geöffnet wurde,
> möchte ich einen Hinweis einblenden.

Kein Ding. Machbar.


> Bietet tcl hier bereits eine Funktion?

Tcl nicht direkt; Tk hingegen schon.
Die übliche Methode für Dünnbrettbohrer ist, dem wish ein
tcl-Script zu übergeben; von dort aus hat man Zugriff auf
alle Tk-Widgets.

von Dirk B. (dirkb2)


Lesenswert?

Egon D. schrieb:
> Dumme Frage: Womit ist dieses vorhandene GUI realisiert?
> Mit Tk?

Hast du ein Tcl-Script schon mal mit einer anderen GUI gesehen?

von kenny (Gast)


Angehängte Dateien:

Lesenswert?

Dirk B. schrieb:
> Du musst ja die Widgets anzeigen lassen.
>
> Dafür gibt es verschiedene Funktionen.
> pack, grid, place fallen mir erstmal ein.
>
> Du kannst, je nach Erfolg des Öffnens, an der Stelle die Widgets
> einbauen.
>
> Da gibt es auch Optionen zum löschen.

Genau der richtige Denkanstoß :)

Die GUI selber konnte ich bisher zwar erweitern; aber so ganz verstanden 
hatte ich sie noch nicht.

Ich denke ich weiß nun wo ich die Abfrage einbauen muss (siehe txt 
file).

von Dumdi D. (dumdidum)


Lesenswert?

Egon D. schrieb:
> Die übliche Methode für Dünnbrettbohrer ist, dem wish ein tcl-Script zu
> übergebe

Und wie machen es die Dickbrettbohrer?

von Egon D. (Gast)


Lesenswert?

Dumdi D. schrieb:

> Egon D. schrieb:
>> Die übliche Methode für Dünnbrettbohrer ist, dem wish
>> ein tcl-Script zu übergebe
>
> Und wie machen es die Dickbrettbohrer?

Die rufen die Tk-Funktionen aus ihrer C-Anwendung heraus
auf.

von Dirk B. (dirkb2)


Lesenswert?

Du kannst auch das Entry anzeigen lassen und disablen.

Dann kann der Eintrag nicht geändert werden.

Es sollte dann auch hellgrau sein.

Dann sucht der User nicht die Funktion.

Hinweise zum Status kannst du auch im Label(frame) angegeben oder in der 
Variablen zum Entry.

: Bearbeitet durch User
von 50c (Gast)


Lesenswert?

...schaue dir auch mal die Beschreibungen zu den jeweiligen Widgets mal 
genauer an! Es gibt da einen Befehl configure, mit dem man die 
verschiedensten Eigenschaften zur Laufzeit und während sie angezeigt 
werden, verändern kann. Mit diesem Befehl plus disable, hidden etc. kann 
man recht hübsche und variable GUIs aufbauen.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Egon D. schrieb:
>> Und wie machen es die Dickbrettbohrer?
>
> Die rufen die Tk-Funktionen aus ihrer C-Anwendung heraus
> auf.

Eigentlich macht man es eher so, dass man nur die laufzeitkritischen 
Funktionen in C implementiert und den Rest als Skript. Da das hier nicht 
laufzeitkritisch ist, spricht wenig für C und ganz viel für Skript.
Skripte kann man zusätzlich zur Laufzeit ändern.

Dünnbrettbohrer sind hier die Schlaueren :-)

@kenny:
Es ist kein Problem, sämtliche Widgets zur Laufzeit zu ändern und aus 
der Oberfläche herauszunehmen. Der jeweilige Geometriemanager (pack, 
grid, place) macht das auch "on the fly".

Damit sich aber nicht alle Widgets verschieben, würde ich den Label etc. 
schon von Anfang an mit leerem Textfeld einbauen:

label .l -text {}

Das wird dann per pack, grid, place eingebaut.

Wenn dann das entsprechende Ereignis eintritt, änderst Du einfach das 
Attribut:

.l config -text {COM1 aktiv}

Es gibt noch viele weitere Möglichkeiten, bspw. die verknüpfung mit 
einer Variablen (Attribut -textvar). Dann ändert sich das Label immer 
dann, wenn sich die Variable ändert.

von kenny (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die vielen guten Anregungen.

Diese werde ich weiter verfolgen, fürs erste habe ich mir mit einem 
weiteren Reiter (Auto meas.) beholfen (siehe Foto).

Ich möchte nun erstmal den Fokus auf die Funktionalität legen, da noch 2 
weitere Geräte eingebunden werden sollen.

Sobald alles stabil läuft, wird die GUI verfeinert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.