• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

C++/Tk - MainWindow ansprechen ?

abgdf

Guru
Hallo,

um Tk-Oberflächen mit C++ zu bauen, hab ich mir C++/Tk (cpptk-1.0.2.tar.gz) von

http://cpptk.sourceforge.net/

:shock:

runtergeladen. Den Ordner "cpptk-1.0.2" habe ich aus dem ".tar.gz" als root nach "/usr/include/c++/4.0.2" kopiert.

Ich mußte noch

Code:
libicu...rpm
boost...rpm
boost.devel...rpm
tcl-devel...rpm
tk-devel...rpm

nachinstallieren, dann konnte ich auf SuSE 10.0 mit diesem kleinen Skript:

Code:
#!/bin/bash

cpptkdir="/usr/include/c++/4.0.2/cpptk-1.0.2"

g++ myprog.cpp $cpptkdir/cpptk.cc $cpptkdir/base/cpptkbase.cc -o myprog -I$cpptkdir -I/usr/share/tcl/tcl8.4 -I/usr/share/tcl/tk8.4 -I/usr/X11R6/include -I/usr/include/boost -L/usr/lib -ltcl8.4 -ltk8.4 -lpthread
folgenden Code (als "myprog.cpp") kompilieren:
Code:
#include "cpptk.h"
#include <stdio.h>

using namespace Tk;

void hello() {
     puts("Hello C++/Tk!");
}

void doBeep() {
     bell();
}


int main(int, char *argv[])
{
     init(argv[0]);

     button(".b") -text("Say Hello") -command(hello);
     pack(".b") -padx(20) -pady(6);

     button(".c") -text("beep") -command(doBeep);
     pack(".c") -padx(20) -pady(6);
         
     runEventLoop();
}

Soweit, so gut 8).

Jetzt wollte ich gern Fenstergröße und -position mit
Code:
wm(geometry, ".w", "=100x200+50+60");
ändern.

Nur, weiß ich leider nicht, wie man mit C++/Tk das Tk-MainWindow ansprechen kann :? .
Könnte mir das bitte jemand sagen ? Vielen Dank für eine Antwort.

Viele Grüße
 

revealed

Guru
hä?

also ich kenn mich da jetz auch nicht so gut aus. Aber dein programm kannst du beispielsweise bei Tcl/Tk mit "wish" ausführen.

Und hier gibts etwas zu Geometrie von Knöpfen usw...:
http://ti.fh-bielefeld.de/pv/studien/tcl+tk/tk_geometry.html

Aber ich weiss glaube ich, was du suchst in etwa. Also selber würde ich auch "widgets" suchen, um mir beispielsweise ein Icon in der Fensterleiste anzeigen zu lassen und um den Titel der Titelleiste zu ändern.

Du könntest beispielsweise versuchen einen Rahmen zu setzen und diesem eine feste Größe geben.

Dazu imm füllen und expandieren. Dann müsste das mit der Größenänderung auch hinhaun?

also beispieksweise die Titelleiste verankern und feste größe zuweisen?

oder sind es die hier? :
http://www.galassi.org/mark//mydocs/guile-programmer_2.html
Tk Geometry Management: place window option value [{option value} ...
Tk Geometry Management: place configure window option value [{option value} ...]
Tk Geometry Management: forget window
Tk Geometry Management: info window
Tk Geometry Management: slaves window
This geometry manager fixed placement of windows, where you specify the exact size and location of the master and slave. This is seldom used, since pack is the more common Tk geometry manager.

Tk Geometry Management: wm option window [args ...]
Interacts with the window manager, allowing the Tk programmer to set such resources as the title, geometry, resize increments, ... of that window. There are many possible values for option, documented in the Tk wm man page.
Da müsste ich wohl dann auch suchen...

Gruss

R
 
OP
A

abgdf

Guru
Aber dein programm kannst du beispielsweise bei Tcl/Tk mit "wish" ausführen.

Ja, das ist klar. Auch Perl/Tk ist ja sehr beliebt. Auch Tkinter ist bei Python gleich dabei. Wie man damit eine Tk-Oberfläche zaubert, hatte ich ja schon hier gezeigt:

http://www.linux-club.de/viewtopic.php?t=75484

Aber: Tk-Oberfläche mit C++, das ist sehr ungewöhnlich.

Warum sollte das nicht eigentlich auch beliebt werden ?
"example5" in dem C++-tar.gz ist z.B. schön schnell...

Jedenfalls: Bei meinem Python-Beispiel gab es mit "mw" ein Objekt, das das MainWindow bezeichnete, so daß man mit "mw.geometry("+280+240")" arbeiten konnte.
In dem C++-Beispiel fehlt mir ein solches MainWindow-Objekt ...

Viele Grüße
 

revealed

Guru
meinst aber schon sowas wie den Titel? Also ich bin totaler nub dabei:

dort hab ich etwas was wohl auch zu dem was du suchst gehört verwendet:
http://www.linux-club.de/ftopic75484.html
#Fenstereigenschaften
#Titelleiste:
wm title . "Einschalter"
#Fenstergröße verändern? mit resizeable 0 oder 1 (lxb)
wm resizable . 0 0
Wobei man den "." wohl dabei für das Hauptfenster verwenden solle. Und "wm" generell für Windowmanager stünde.

das hat wohl auch mir der Hierarchie bei den Bezeichnungen zu tun also
.
.rahmen
.buttonbezeichnung

Wobei das bei mir wohl nicht wirklich richtig ist.. ich müsste das noch einiges schlanker gestalten und wohl auch Objekte verwenden. Aber so wie es jetz ist könnte sich das jemand einfach nehmen und seine Kanäle eintragen.

Gruss

R
 
OP
A

abgdf

Guru
Vielen Dank für Deine Bemühungen. Meine Frage zielt aber nicht auf Tk selbst. Daß man in Tcl (wish), Perl oder Python das Tk-MainWindow beeinflussen kann, ist klar. Bei meiner Frage kommt es aber auf die Syntax dieser besonderen C++-Implementierung von "C++/Tk" an. Das ist recht speziell.

Außerdem wollte ich mal zeigen, daß Tk mit "C++/Tk" im Prinzip geht. Das ist schon etwas Besonderes, da es sowas bisher soweit ich weiß nicht gegeben hat.
Daß das im Forum hier und auch sonst bei den Entwicklern draußen im Lande offenbar kaum jemanden interessiert, obwohl Tk in Verbindung mit anderen Sprachen wie Perl sehr beliebt ist, ist eins der großen Rätsel der Menschheit :).

Viele Grüße
 

revealed

Guru
dann war das hier nicht das was du gesucht hattest?:
das hat wohl auch mir der Hierarchie bei den Bezeichnungen zu tun also
.
.rahmen
.buttonbezeichnung
Ich meinte damit, dass du die bezeichnende Funktion bei "ca.. wm geometrie" eventuell falsch angegeben haben könntest, so dass dieser nicht der Anordnung entsprechen könnte.

also "." kommt als erstes oder? dann ".objekt"

Eventuell

Ansonsten akzeptier ich das jetzt einfach weil ich nicht verstehe von was du genau redest :)

Gruss

R
 
Oben