Schrift
[thread]10976[/thread]

Zeichenoberfläche in Gui (einbettbar)?

Leser: 1


<< >> 9 Einträge, 1 Seite
jemand
 2007-12-07 23:30
#103604 #103604
User since
2004-05-14
231 Artikel
BenutzerIn
[default_avatar]
Hallo, liebe perl-community,

ich habe bereits vor einiger Zeit mal nach einer Lösung für mein Problem gesucht, konnte jedoch keine befriedigende finden. Daraufhin habe ich die Entwicklung dieser Anwendung erstmal aufgeschoben. Nun jedoch stehe ich wieder vor demselben Problem:

Es geht darum, dass in einer Anwendung ein möglichst vielseitiges Zeichnungswidget benötigt wird, ein SDL-Surface wäre dazu ideal. Jedoch soll die Anwendung auch über 'normal' aussehende Steuerungswidgets verfügen.

Tk::Canvas bringt leider nicht die benötigte Zeichenfunktionalität mit sich. Tk::Zinc soweit ich die Doku überflogen hab, auch nicht.
Konkret geht es beispielsweise um das Zeichnen einzelner Pixel. In der 'widget' wird ein Workaround über '.'-Stings verwendet, den ich weder schön, noch praktikabel finde.

Ansich würde ich ja für die Anwendung reines SDL verwenden, aber dann fehlen eben die Steuerungwidgets.
Alternativ könnte man natürlich ein Fenster zu Steuerung in TK erstellen, und das Plotten in einem extra Fenster abhandeln. Gefällt mir aber nicht wirklich.

Demnach suche ich nun nach einer vielseitigen Zeichenfläche in einem Standard-Gui, oder einer Möglichkeit, SDL innerhalb von Tk zu nutzen. Kann auch gtk oder wx sein, kenn ich zwar noch nicht, aber wenn es denn gut funktioniert, immer gerne.
Wichtig ist noch, dass es plattformunabhängig ist.

Dank und Gruss
print uc 'i',chr(29*4).q+'s +.++($_=q-m-),++$_;
print chr for 116,$_[0],97,$_[0],98;
print 'ug,',chr(), scalar reverse qq?!erutaef a s'ti?;
Spieler
 2007-12-07 23:47
#103605 #103605
User since
2007-09-24
70 Artikel
BenutzerIn
[default_avatar]
Hallo,

Pixel würde schon gehen.
Code: (dl )
1
2
3
4
5
use Tk;
my $mw = tkinit;
my $can = $mw->Canvas->pack;
$can->createLine(10,10,10.5,10);
MainLoop;

Das könnte man auch leicht in (z.B.) Canvas::createPoint(x,y) wrappen - vielleicht noch taggen, damit man weiss, dass es wirklich nur ein Punkt ist. Und um ggf. scaling abzufangen...

Christoph
ptk
 2007-12-08 00:21
#103607 #103607
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Es gibt http://search.cpan.org/dist/Tk-Canvas-Point/. Damit kann man "echte" Punkte zeichnen, ohne der createLine-Trick zu verwenden.
lichtkind
 2007-12-08 01:26
#103608 #103608
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
Mit einem Wx::DC hast du maximale freiheit alles zu zeichnen sogar über das wie und wann des repaints und buffer refreshs. Auch geometrische primitiven:picel, linien rechtecke kreise, pinsel und text in beliebiger schriftart können beliebig eingesetzt werden. steht alles in beispielen von wxperl.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
ptk
 2007-12-08 01:44
#103610 #103610
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Bei Tk ist es übrigens auch möglich, ein Container-Frame zu definieren. Dort könntest du vielleicht ein SDL-Surface unterbringen.
Gast Gast
 2007-12-08 08:24
#103613 #103613
SDL kann man nur mit einem Trick (Umgebungsvariable modifizieren) in ein Fenster mit eigener Fensterid einbinden. SDL kennt keine Option eine Fensterid zu übergeben.
Gast Gast
 2007-12-08 10:38
#103614 #103614
Ergänzung: der Name der Umgebungsvariable lautet: 'SDL_WINDOWID'
ptk
 2007-12-08 12:23
#103615 #103615
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Hier ist ein Beispiel, wie man Gtk2 und SDL integrieren kann: http://www.perlmonks.org/?node_id=599121
jemand
 2007-12-08 19:25
#103637 #103637
User since
2004-05-14
231 Artikel
BenutzerIn
[default_avatar]
Oke, danke euch allen.
Die Seite kannte ich ptk, schon per google gesichtet. Dachte aber beim Überfliegen des Codes, da würde ein neues Fenster geöffnet...
Ich werde mal testen wie das so funktioniert und mir wohl auch mal wx ansehn.
Zur Not kann ich dann immernoch Tk::Canvas::Point verwenden.
print uc 'i',chr(29*4).q+'s +.++($_=q-m-),++$_;
print chr for 116,$_[0],97,$_[0],98;
print 'ug,',chr(), scalar reverse qq?!erutaef a s'ti?;
<< >> 9 Einträge, 1 Seite



View all threads created 2007-12-07 23:30.