Ich möchte ein Fenster mit zwei Textfeldern übereinander erstellen, die zuerst 25% der Höhe einnehmen und dann 75% der Höhe einnehmen.Tcl/tk - Fensterhöhe und -breite abrufen und relative Texthöhe im Raster einstellen
Ich habe versucht, relative Höhe/Breite von Toplevel Win zu berechnen und Textbefehl übergeben, aber nicht funktioniert (ich rate, weil die Einheiten der Dimension von WM-Geometrie zurückgegeben ist nicht das gleiche wie bei Textbefehl übergeben)
Im Anschluss ist mein Code:
toplevel .t
wm geometry .t 1500x800+10+10
update
proc topAspect {args} {
regexp {(\d+)} $args -> relAspect
regexp {([^\d|%]+)} $args -> aspect
regexp {(.*)x(.*)[+-](.*)[+-](.*)} [wm geometry .t] -> width height x y
puts "width->$width height->$height x->$x y->$y"
switch -regexp [string tolower $aspect] {
x {
return [expr $x + $relAspect]
}
y {
return [expr $y + $relAspect]
}
w {
return [expr $width * $relAspect/100]
}
h {
return [expr $height * $relAspect/100]
}
default {
log::log error "Unsupported relative aspect $aspect cannot be determined for top level window"
}
}
}
text .t.text1 -height [topAspect -width 25%] -width [topAspect -width 99%]
grid .t.text1 -sticky news
text .t.text2 -height [topAspect -width 75%] -width [topAspect -width 99%]
grid .t.text2 -sticky news
Als ich folgenden versucht - es mir ein paar anständige GUI gab:
text .t.text1 -height 20 -width [topAspect -width 99%]
grid .t.text1 -sticky news
text .t.text2 -height 20 -width [topAspect -width 99%]
grid .t.text2 -sticky news
aber ich mag die relati verwenden Optionen. Wie funktioniert es?
darauf geachtet werden muss, Geometrie Ausgabe Parsen wie es negative Offsets in Multimonitor-Setups haben. zB: '200x200 + -638 + 77' auf meiner. Also die 'scan' Anweisung, die korrekt analysiert wird, ist '[scan $ geometrie'% dx% d +% d +% d"] 'welche die Negative verarbeiten kann. – patthoyts
Danke für die Korrektur, ich habe die Dokumentation des Formats missverstanden. Aber von meinem gegenwärtigen Verständnis könnte das Präfix - ebenso wie +, möglicherweise gefolgt vom Zeichen von g die Zahl sein. Wenn ja, müsste es mit '{% dx% d% * 1 [+ -]% d% * 1 [+ -]% d}' oder dem regulären Ausdruck '{(\ d +) x (\ d +) [+ -] ([+ -]? \ d +) [+ -] ([+ -]? \ d +)} '. –
Das Format WxH-X + Y (mit einem führenden Minus für den X-Offset zeigt an, dass die Position vom rechten Ende des Bildschirms ist - Siehe die Kommentare zu WM_NEGATIVE_X in tkWinWm.c. So könnten wir möglicherweise 1x1- -2 + 3 "Ich denke ja. Sieht aus wie eine Regex ist notwendig. – patthoyts