热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pack布局管理器的使用方法及注意事项

本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。

Chapter 2. Geometry Management 第2章 布局管理:显示部件在屏幕上,他们必须被传递给布局管理器。布局管理器 控制部件的位置和大小 在显示窗口,几个布局管理器是可用的在Perl/Tk pack,place,grid和form所有的部件管理器 是被调用作为方法,但是他们有自己的方法学和参数来改变 部件应该怎么放和放在那里。$widget1->pack(); $widget2->place(); $widget3->grid(); $widget4->form( );当你组织部件在你的窗口,如果经常需要单独的部件组来得到某个外观和感受例如,当你是用pack,它是很难把部件堆放在水平和垂直方向上没有分组他们以某种方式。我们使用一个Frame部件或者另外一个窗体 来组织部件在窗口内。我们通过创建我们第一个窗口 通过调用MainWindow,MainWindow 是一个指定的Toplevel 部件的表格对于更多的详细的信息如何创建/配置 Frame 和Toplevel 部件,除了布局,在布局管理器之间的不同 让它变得困难(不是完全不可能,但绝对不推荐)使用多于一种的布局管理器 在相同的区域。在$mv,我们可以显示很多类型的部件,但是当我们开始使用pack,我们应该继续使用pack在所有的部件 包含在$mv.不要在中间切换到grid,因为两个布局管理器会进入一个竞争的条件:一个会创建它的布局,会影响其他的布局计算,会影响第一个布局,导致它重新计算它的布局..然而,让我们假设我们的主窗体包含一个Frame,进而包含其他的小部件。我们可以使用pack来pack Frame 在MainWindow 我们可以使用grid 来管理部件在Frame里 图2-1, Frame 在一个窗体里 使用不同的部件管理器:虽然不同的部件管理器有它们自己的有点和缺点, pack是最常用的,因此我们首选讨论。 grid布局管理器 已经改进了在Tk8.0 ,随后移植到Perl.2.1. The pack Geometry Manager pack 布局管理器:记得 当你是一个child 你需要那些木板来放在一起?pack 布局管理器,我们的windows 类似于积木拼图,因为部件不能重叠或者相互覆盖, 部分或者完全的。如果一个按钮是被放置在某个空间在windows里, 下一个按钮(或者任何部件) 必须适应周围已经放置的按钮。幸运的是,我们的windows 将会只处理矩形形状 代替有趣形状的拼图。图2 - 2。重叠误差你放置部件的顺序 是非常重要的,因为它直接影响 你在屏幕上看到的。每个Frame 或者Toplevel 维护一个items的列表是显示在里面这个列表有一个订单, 如果部件A 是放置在部件B前,那么部件A 会得到优先权 如果空间变得稀缺,这个会变的清晰 当我们通过一些例子。如果我们不关心 windows看起来像和 部件如何放进去, 你可以使用pack 不带参数跳过这章的其余部分:$widget->pack( );为了让你的window 看起来更好看,和更好管理(更友善),这里有参数可以被发送给pack方法会改变部件的方式和窗口外观。参数被安排为键值对,因此,更加复杂的用法是:$widget->pack( [ option => value, ... ] );这个代码创建一个窗体,不使用任何pack选项。我们没有覆盖任何的部件在这个例子里, 但坚持下去,很简单:图2-3, pack 管理Windows 部件我们可以改变前面的代码,增加一些选项来pacl 请求,让我们的windows 看起来更好:图2-4,pack布局的一些选项:使用pacl 允许你控制:窗口的位置相对于windows或者Frame edges:部件的大小, 相对其他 部件:部件之间的空间位置在窗口或者窗体的部件列表:选项,值和默认值是被列出和描述在下面章节:2.1.1 pack的选项:这里列出了所有的选项 当你调用pack( 默认值以粗体显示)-side => 'left' | 'right' | 'top' | 'bottom放置部件指定在windows或者窗体指定的方位:-fill => 'none' | 'x' | 'y'| 'both'导致部件填充分配矩形在指定的方向:-expand => 1 | 0 导致分配矩形填充剩余的可用空间在窗体或者Frame:-anchor => 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w' | 'nw' | 'center'描点 部件内部分配矩形-after => $otherwidget布置部件在$otherwidget 后面 -in => $otherwindow布置 $widget 在$otherwindow 相比 $widget的父窗体,是默认的选项:2.1.2. Positioning Widgets定位部件:每个窗口(或者窗体)有4个方向: top, bottom, left, and right.packer 使用那些sides 作为部件的参考点。默认的,pack 部署部件仅靠toplevel 或者Frame.你可以控制部件的size 通过-side 选项:-side => 'left' | 'right' | 'top' | 'bottom'例如,如果我们想我们的部件仅靠着 窗口的左边,我们可以指定 -side => 'left'.当我们使用Hello World 例子作为一个基础,让我们看看发生了什么当我们pack我们的按钮仅靠不同的sides.在图2-5中, 唯一改变的行 是按钮的 ->pack 创建行图2-5,部署一个按钮在不同的sides:图2-5 已经有点大的强调 不同在使用 可替代的值 对于-side makes.通常情况下, 窗口是和需要的一样大 来显示一个按钮。当你决定如何在窗口上放置部件, 它总是一个好的主意来看看发生了什么 当你把窗口变大或者变小。到目前为止, pack 看起来更简单, 但是入股你要put 多于一个按钮在你的应用里?当我们增加更多的按钮 会发生什么?#!/usr/bin/perl -w
use Tk;my $mw = MainWindow->new;
$mw->Button(-text => 'Done1', -command => sub { exit })->pack;
$mw->Button(-text => 'Done2', -command => sub { exit })->pack;
$mw->Button(-text => 'Done3', -command => sub { exit })->pack;
$mw->Button(-text => 'Done4', -command => sub { exit })->pack;
MainLoop; 2.1.3 分配矩形:当布置一个项目,packer 首选查看 哪边来使用(top, bottom, right, or left) 在图2-7,实线矩形代表我们空的window(或者Frame).虚线矩形面积是区域 packer 设置aside 对于第一个按钮它确实一直在窗口的宽度和高度, 但更简单的看到, 它缩进显示:图2-7,矩形区域设置aside 通过packer 当使用 -side => 'top' and -side => 'left'虚线框 的尺寸, 我们称之为分配矩形,基于请求部件的尺寸。对于顶部和底部,分配矩形是和窗体一样宽的 只有和部件一样高才被放置。对于右边和左边, 分配矩形是和窗口一样高 2.1.4 填充矩形分配:通常情况下,部件是在左边 在默认的尺寸,通常是小于分配矩形 如果选项-fill 被使用,部件会resize 它本身来填满分配矩形根据给定的值 下面的值是:-fill => 'none' | 'x' | 'y' | 'both'使用值 'x' 会resize 部件在水平方向,同样 'y' 会导致部件resize 在垂直方向。使用-fill=>'both' 是一个好的方式来准确的查看 什么尺寸和位置分配给矩形,因为'both' resize 部件在x和y方向$mw->Button(-text => "TOP", -command => sub { exit })->pack(-side => 'top', -fill => 'both');$mw->Button(-text => "BOTTOM", -command => sub { exit })->pack(-side => 'bottom', -fill => 'both');$mw->Button(-text => "RIGHT", -command => sub { exit })->pack(-side => 'right', -fill => 'both');$mw->Button(-text => "LEFT", -command => sub { exit })->pack(-side => 'left', -fill => 'both');2.1.5 扩展分配矩形:-expand 选项 操作分配矩形,不是在部件内部。 -expand相关的值是一个布尔值:-expand => 1 | 0给定一个真值, 分配举证 会扩展到任何剩余的空间,依赖部件被部署在哪个方向:部件 部署在右边或者左边会扩展在水平方向,部件部署方向为top或者bottom 扩展为垂直方向。2.1.6. Anchoring a Widget in Its Allocation Rectangle 锚定一个部件在他的分配矩阵2.1.8 填充部件大小:最终的方式迫使pack来定义部件的大小 来是用padding 选项。第一个填充选项影响部件本身是通过增加它的默认的尺寸。不同数量可以被追加在x和y方向,或者 也可以相同。指定填充多少在x方向 使用-ipadx 选项:-ipadx => amount指定y方向填充 如下:-ipady => amount数量是一个数字是一个有效的屏幕距离, 我们会讨论正确的屏幕距离定义 在下面章节:-ipadx 和-pady 选项 改变部件的尺寸在分配矩形被计算前。-ipadx 增加指定的总量 指定给部件的right和left 边。部件的总体宽度 是2的倍数增加。-ipady 增加部件的top和bottom ,导致部件的总体高度 按的倍数图2-23 显示-ipadx 和-ipady 选项如何影响一个按钮:图2-23,Done1 按钮被创建带选项 -ipadx => 10, -ipady => 10另外一种填充是插入到 窗体边际和分配矩形边际之间 , 通过 -padx and -pady -padx => amount
-pady => amount使用-padx 和-pady 不影响部件的大小,但是它影响分配矩阵的大小。它表现像是一个buffer 围绕在部件周围, 保护它接触到其他部件图2-24 Done1 被创建带options -padx => 10, -pady => 10 好的方式记住-ipadx/y and -padx/y的不同是 i代表内部 或者说是内部填充2.1.8.1 有效的屏幕距离:很多次 你会看到选项 需要指定的值 在屏幕单元( 或者是被称为一个正确的屏幕距离)选项 -ipadx and -ipady 是这种类型的例子 一个屏幕单元是一个数字 跟一个指定要使用的单位,如果没有指定,但是是像素 表2 - 1显示了所有的可能性。1.9 在parent中显示 相比你自己:默认情况下, 当一个部件被部署,它是部署在创建它的区域。 有时候 它需要显示一个部件在不同的区域 ,使用-in 选项:-in => $otherwindow它 放置新的小部件 在pack顺序最后 对于 $otherwindow 和显示它,所有其他选项被指定 在pack仍旧适用:3.1.10 与pack相关的方法:有一些方法 用于连接在pack布局管理器,他们允许程序得到关于每个部件的信息 已经被部署的 或者parent 部件 其他部件部署在parent里2.1.10.1. Unpacking a widget 取消一个部件To unpack a widget from a window or Frame, use the packForget method:$widget->packForget( );packForget 让部件消失, 不是不是被摧毁,但是它在被pack管理。部件被删除从packinbg 顺序, 如果它后面repacked, 它出现在packing 顺序的尾部2.1.10.2 检索pack信息:返回一个所有配置信息的列表,使用packinfo:@list = $widget->packInfo( );列表的格式是键值对,第一个键值对在列表是 -in和当前窗口包含的$widget(通常是父窗体)-in MainWindow=HASH(0x818dcf4) -anchor n -expand 0 -fill none -ipadx 0 -ipady 0 -padx
10 -pady 10 -side left


转:https://www.cnblogs.com/zhaoyangjian724/p/6200338.html



推荐阅读
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 本文介绍了在PostgreSQL中批量导入数据时的优化方法。包括使用unlogged表、删除重建索引、删除重建外键、禁用触发器、使用COPY方法、批量插入等。同时还提到了一些参数优化的注意事项,如设置effective_cache_size、shared_buffer等,并强调了在导入大量数据后使用analyze命令重新收集统计信息的重要性。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • Tkinter Frame容器grid布局并使用Scrollbar滚动原理
    本文介绍了如何使用Tkinter实现Frame容器的grid布局,并通过Scrollbar实现滚动效果。通过将Canvas作为父容器,使用滚动Canvas来滚动Frame,实现了在Frame中添加多个按钮,并通过Scrollbar进行滚动。同时,还介绍了更新Frame大小和绑定滚动按钮的方法,以及配置Scrollbar的相关参数。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
  • STM32 IO口模拟串口通讯
    转自:http:ziye334.blog.163.comblogstatic224306191201452833850647前阵子,调项目时需要用到低波 ... [详细]
author-avatar
无极圈颜汐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有