別のトップレベル内のルート トップレベルの子であるウィジェットpack
(それ自体の子)を試みています。あれは、place
.
.
% toplevel .tl
.tl
% frame .f
.f
% pack .f -in .tl
can't pack .f inside .tl
ただし、このコードはほとんど機能することがわかりました。
% frame .tl
.tl
% frame .f
.f
% pack .f -in .tl
% wm manage .tl
見えないので、ほぼと言った。のような.f
ボタンを中に入れると、少し奇妙です。.f
button .f.b -text FooBar
pack .f.b
ジオメトリ マネージャーによって予約された空のスペースが表示されますが、ウィジェットが表示されません。
私は何か間違ったことをしていると確信していますが、何がなぜなのかわかりませpack
ん。grid
place
編集:私がやっていることについての詳細
トップレベルの作成を自動化する snit ウィジェットを構築しようとしています。私が通常行うことの 1 つは、ttk::frame
作成するすべてのトップレベルの内部に配置し、pack ... -fill both -expand true
コマンドを使用してそれを管理することです。
私のスニジェットは常にそれを行う必要がありますが、実装を変更しても既存のコードが壊れないように、ユーザーの観点からは隠したいと思います。
簡単な方法はこれです
snit::widget Toplevel {
hulltype toplevel
component f
constructor {args} {
set f [ttk::frame $self.f -padding 2]
pack $f -fill both -expand 1
$self configurelist $args
}
}
ただし、ユーザーはコンポーネントについて知っている必要があり、そのf
子として他のウィジェットを作成する必要があります。
そこで、別の解決策を試しました。ttk::frame
ウィジェットをハル タイプとして使用してから、ハルの兄弟トップレベルを構築し、ハルをトップレベル内に配置しようとしました。
私が試したコードは次のようなものです。
snit::widget Toplevel {
hulltype ttk::frame
component tl
constructor {args} {
set segments [split $self .]
set wname [join [lreplace $segments end end _[lindex $segments end]] .]
set tl [frame $wname -width 100 -height 100]
pack $self -in $tl -fill both -expand 1
wm manage $tl
$self configurelist $args
}
}
期待どおりに動作する場合、ユーザーは次のように記述できます。
% Toplevel .t
.t
% button .t.b -text Foobar
.t.b
% pack .t.b
.t
スニジェットを使用して、トップレベルのビルド内にボタンを取得します。