作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图使用 Perl Tkx 创建一个窗口,其中包含一个 TreeView 小部件和一个位于其右侧的滚动条。我需要 TreeView 小部件在用户调整窗口大小时自动调整大小。
这是我的:
my $mw = Tkx::widget->new(".");
my $frm = $mw->new_ttk__frame(-padding => "2 6 12 12");
$frm->g_grid(-column => 0, -row => 0, -sticky => "nwes");
$frm->g_pack(-expand => 1, -fill => 'both');
my $tree = $frm->new_ttk__treeview;
$tree->g_grid(-column => 1, -columnspan => 5, -row => 1, -sticky => "we");
$tree->g_pack(-expand => 1, -fill => 'both');
my $scrollbar = $frm->new_ttk__scrollbar(-orient => 'vertical', -command => [$tree, 'yview']);
$scrollbar->g_grid(-column => 6, -row => 1, -sticky => "we");
$scrollbar->g_pack(-expand => 1, -fill => 'both');
$tree->configure(-yscrollcommand => [$scrollbar, 'set']);
两个小部件都显示在窗口中,并且调整大小有效,但不幸的是,滚动条放置在树的下方,而不是右侧。如果我删除三个 g_pack(-expand => 1, -fill => 'both')
行,定位是正确的,但调整大小不起作用。如何将滚动条放在树的右侧,并使自动调整大小起作用?
最佳答案
您同时使用 grid
和 pack
将小部件布局到同一个容器中,这是不受支持的。第一步是在任何地方都只使用 pack
,因为您对小部件的安排很简单。
对滚动条使用 -expand => 1
意味着 Tk 会尝试给它尽可能多的空间。您不希望滚动条出现这种情况,因为它只应为其分配足够的空间。我已将 -fill
更改为 'y'
作为样式问题,但它似乎没有太大区别。
$scrollbar->g_pack(-expand => 0, -fill => 'y');
pack
默认情况下会将小部件一个接一个地排列。所以,如果你需要从左边开始的水平排列,你应该添加一个 -side
参数:
$tree->g_pack(-expand => 1, -fill => 'both', -side => 'left');
$scrollbar->g_pack(-expand => 0, -fill => 'y', -side => 'left');
我建议您阅读优秀的 Mastering Perl/Tk书,尤其是有关 pack
的部分几何管理器。本书使用Tk module
而不是 Tkx,但我认为在两者之间映射概念应该很容易。
关于perl - 如何在 Perl Tkx 中实现带滚动条的可调整大小的 TreeView 小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32894644/
我是一名优秀的程序员,十分优秀!