Schrift
[thread]4664[/thread]

toplevel in bildschirmmitte positionieren



<< >> 10 Einträge, 1 Seite
helmut
 2003-10-05 01:24
#44520 #44520
User since
2003-09-23
5 Artikel
BenutzerIn
[default_avatar]
hallo zusammen,

und noch ne' frage: ist es möglich, perlt/tk toplevelfenster beim öffnen zu positionieren, am besten in bildschirmmitte? auf meinem suse-linux-system, werden fenster beim öffnen immer da positioniert, wo gerade platz ist, also mit unter fast ausserhalb des sichtbaren bereichs.

weiss jemand rat?

danke helmut
skontox
 2003-10-05 09:04
#44521 #44521
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Guten Morgen!
Unter Linux funtzt das bei mir leider auch nicht ganz. Ich habe mir zwar ne kleine Sub geschrieben, die unter Windows eigentlich sehr gut funtzt, aber unter Linux hatte ich letztens meine GUI mal laufen lassen und da hat er mir die Fenster auch nicht so gesetzt wie ich gerne wollte, allerdings hab ich da auch nicht weiter nachgeschaut, vielleicht muß man da nicht viel ändern, dann läuft es auch unter Linux.
Mußt mal schauen, was man da ändern kann, damit es auch unter Linux gut läuft. Noch ne Anmerkung, wenn ich meinem GUI ein eigenes Icon verpasse, klappt das auch unter Windows nicht. Da bin ich leider auch überfragt woran das liegt.
Der Code ist wahrscheinlich auch nicht der beste. Aber vielleicht hilft Dir das ein wenig weiter.


Ich poste Dir hier mal den CODE:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
### hier der Aufruf: ###
&zentriere_fenster($mw); # Parameter 1: Übergibt die Fenstervariable; Parameter 2: Verschiebung der X-Achse; Parameter 3: Verschiebung der Y-Achse

### hier ein Beispiel-Aufruf mit Parameter-Werten: ###
&zentriere_fenster($mw,0,-20);

#### hier die SUB: ####
#### Diese Subroutine Berechnet die zentrierte Darstellung auf dem Bildschirm ####

sub zentriere_fenster {
   my $widget = shift; # Fenster als Übergabeparameter
   my $x_ver  = shift; # Verschiebung auf der X-Achse vom Zentrum (bei positiven Wert Verschiebung nach rechts. Negativ für links)
   my $y_ver  = shift; # Verschiebung auf der X-Achse vom Zentrum (bei positiven Wert Verschiebung nach unten. Negativ für oben)

   #### Platzierung des Infofensters auf dem Bildschirm ermitteln und mittig anordnen ####
   $widget->update; # Werte werden geupdatet, damit die tatsächliche Breite und Höhe ermittelt werden kann

   my $tats_breite = $widget->width(); # Tatsächliche Breite wird ermittelt
   my $tats_hoehe = $widget->height(); # Tatsächliche Höhe wird ermittelt

   my @aktuelle_b_aufloesung = ($breite=$mw->screenwidth, $hoehe=$mw->screenheight); # aktuelle Bildschirmauflösung wird in array geschrieben

   my @widget_platzierung = (($aktuelle_b_aufloesung[0]/2)-($tats_breite/2)+$x_ver, ($aktuelle_b_aufloesung[1]/2)-($tats_hoehe/2)+$y_ver); # Berechnung für die Mittlere Platzierung auf den Bildschirm

   for (@widget_platzierung)  # Runden, denn sonst kann es zu Fehlern bei der Methode geometry kommen, denn es können nur ganzzahlige Zahlen benutzt werden
   {
        $_= sprintf("%.0f",$_);
   }

   $widget->geometry("+$widget_platzierung[0]+$widget_platzierung[1]"); # Nun wird die Position des Fensters aus den errechneten Werten festgelegt
}

####### hier die SUB nochmal ohne Inline DOKU ########
sub zentriere_fenster {
   my $widget = shift;
   my $x_ver  = shift;
   my $y_ver  = shift;

   $widget->update;

   my $tats_breite = $widget->width();
   my $tats_hoehe = $widget->height();

   my @aktuelle_b_aufloesung = ($breite=$mw->screenwidth, $hoehe=$mw->screenheight);

   my @widget_platzierung = (($aktuelle_b_aufloesung[0]/2)-($tats_breite/2)+$x_ver, ($aktuelle_b_aufloesung[1]/2)-($tats_hoehe/2)+$y_ver);

   for (@widget_platzierung)
   {
        $_= sprintf("%.0f",$_);
   }

   $widget->geometry("+$widget_platzierung[0]+$widget_platzierung[1]");
}


Wie Du siehst sind da einige Methode zu erkennen, wie man an die relevanten Daten kommt. Ich hoffe ich konnte Dir etwas weiter helfen, ich würde mich auch freuen, wenn Du bessere Vorschläge und Lösungen, die eventuell auch unter Linux laufen hier postest. Sobald ich mehr Zeit habe, probiere ich die Sub mal zu optimieren, so dass sie auch unter Linux gute Ergebnisse erzielt.

Ich hoffe, ich konnte Dir wenigstens etwas weiter helfen.

Gruß skontox\n\n

<!--EDIT|skontox|1065330397-->
esskar
 2003-10-05 15:54
#44522 #44522
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
oder am parent ausrichten, falls vorhanden:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
sub CenterWidget
{
my $widget = shift;
$widget->update();
my $parent = $widget->parent();

my($pwidth, $pheight, $px, $py) = (0, 0, 0, 0);

if($parent)
{
$pwidth = $parent->width;
$pheight = $parent->height;
$px = $parent->x;
$py = $parent->y;
}
else
{
$pwidth = $widget->screenwidth;
$pheight = $widget->screenheight;
}

my $wwidth = $widget->width;
my $wheight = $widget->height;

my $posx = $px + int(($pwidth / 2) - ($wwidth / 2));
my $posy = $py + int(($pheight / 2) - ($wheight / 2));

$widget->geometry($wwidth . 'x' . $wheight . '+' . $posx . '+' . $posy);
}
ptk
 2003-12-02 19:45
#44523 #44523
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Oder Popup() verwenden:

Code: (dl )
1
2
3
4
use Tk;
my $top = MainWindow->new;
$top->Popup;
MainLoop;


Als Argument kann man hier u.a. -popover => $parent angeben, um an einen vorhandenen Parent auszurichten.
Crian
 2003-12-03 14:36
#44524 #44524
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
oder so

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my 	$MamaGUI       = new MainWindow( -title => "Mein Programm");

# Größe des Fensters:
my $windowHeight  = "600";
my $windowWidth   = "800";

# Bildschirmgröße holen:
my $screenHeight  = $MamaGUI->screenheight;
my $screenWidth   = $MamaGUI->screenwidth;

# MamaGUI zentrieren:
$MamaGUI->geometry($windowWidth."x".$windowHeight);
$MamaGUI->geometry("+" .
                   int($screenWidth/2 - $windowWidth/2) .
                   "+" .
                   int($screenHeight/2 - $windowHeight/2)
                  );


(vgl. das entsprechende Snippet auf meiner Perlseite)\n\n

<!--EDIT|Crian|1070455107-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Strat
 2003-12-04 00:48
#44525 #44525
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
achtung beim zentrieren; wenn man das fenster nicht verschieben kann, ist es nicht so toll zum arbeiten, wenn man den desktop auf mehrere Monitore ausbreitet, und man dann die haelfte im linken und die andere haelfte im rechten monitor sieht... (darueber habe ich mich gerade mal ziemlich geaergert...)\n\n

<!--EDIT|Strat|1070491770-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2003-12-04 01:41
#44526 #44526
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Igitt - aber auf das Problem muss man auch erstmal kommen.

Andererseits sollte man eh einen wirklich guten Grund dafür haben, das Verschieben eines Fensters verhindern zu wollen.\n\n

<!--EDIT|Crian|1070494880-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pktm
 2007-07-27 02:18
#44527 #44527
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
In skontoxs Version fehlt in der undokumentierten Methode noch my ($breite, $hoehe) = undef; oder ähnliches, da sich Perl sonst über nicht initialisierte Variablen beschweren könnte.
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2007-07-27 09:53
#44528 #44528
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hui, da hat einer aber mal wieder ganz tief gegraben ;)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pktm
 2007-07-27 15:54
#44529 #44529
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
[quote=renee,27.07.2007, 07:53]Hui, da hat einer aber mal wieder ganz tief gegraben ;)[/quote]
Ja, das passiert wenn man sich interessante Artikel speichert, Jahre später die Codes daraus ausprobiert und auf einmal den Fehler findet :D
http://www.intergastro-service.de (mein erstes CMS :) )
<< >> 10 Einträge, 1 Seite



View all threads created 2003-10-05 01:24.