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:
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-->