Python GUI 之tkinter库的介绍

tkinter

Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

tkinter核心窗口部件

GUI 编程就相当于小孩子搭积木,每个积木块应该放在哪里,每个积木块显示为多大,也就是对大小和位置都需要进行管理,而布局管理器正是负责管理各组件的大小和位置的。此外,当用户调整了窗口的大小之后,布局管理器还会自动调整窗口中各组件的大小和位置。

1.Pack布局:使用 Pack 布局,那么当程序向容器中添加组件时,这些组件会依次向后排列,排列方向既可是水平的,也可是垂直的。pack() 方法通常可支持如下参数选项:
anchor:当可用空间大于组件所需求的大小时,该选项决定组件被放置在容器的何处。该选项支持 N(北,代表上)、E(东,代表右)、S(南,代表下)、W(西,代表左)、NW(西北,代表左上)、NE(东北,代表右上)、SW(西南,代表左下)、SE(东南,代表右下)、CENTER(中,默认值)这些值。
expand:该 bool 值指定当父容器增大时才是否拉伸组件。
fill:设置组件是否沿水平或垂直方向填充。该选项支持 NONE、X、Y、BOTH 四个值,其中 NONE 表示不填充,BOTH 表示沿着两个方向填充。
ipadx:指定组件在 x 方向(水平)上的内部留白(padding)。
ipady:指定组件在 y 方向(水平)上的内部留白(padding)。
padx:指定组件在 x 方向(水平)上与其他组件的间距。
pady:指定组件在 y 方向(水平)上与其他组件的间距。
side:设置组件的添加位置,可以设置为 TOP、BOTTOM、LEFT 或 RIGHT 这四个值的其中之一。

2.Grid布局:Grid 把组件空间分解成一个网格进行维护,即按照行、列的方式排列组件,组件位置由其所在的行号和列号决定,行号相同而列号不同的几个组件会被依次上下排列,列号相同而行号不同的几个组件会被依次左右排列。使用 Grid 布局的过程就是为各个组件指定行号和列号的过程,不需要为每个网格都指定大小,Grid 布局会自动为它们设置合适的大小。
程序调用组件的 grid() 方法就进行 Grid 布局,在调用 grid() 方法时可传入多个选项,该方法支持的 ipadx、ipady、padx、pady 与 pack() 方法的这些选项相同。而 grid() 方法额外增加了如下选项:
column:指定将组件放入哪列。第一列的索引为 0。
columnspan:指定组件横跨多少列。
row:指定组件放入哪行。第一行的索引为 0
rowspan:指定组件横跨多少行。
sticky:有点类似于 pack() 方法的 anchor 选项,同样支持 N(北,代表上)、E(东,代表右)、S(南,代表下)、W(西,代表左)、NW(西北,代表左上)、NE(东北,代表右上)、SW(西南,代表左下)、SE(东南,代表右下)、CENTER(中,默认值)这些值。

3.Place 布局就是其他 GUI 编程中的“绝对布局”,这种布局方式要求程序显式指定每个组件的绝对位置或相对于其他组件的位置。如果要使用 Place 布局,调用相应组件的 place() 方法即可。在使用该方法时同样支持一些详细的选项,关于这些选项的介绍如下:
x:指定组件的 X 坐标。x 为 0 代表位于最左边。
y:指定组件的 Y 坐标。y 为 0 代表位于最右边。
relx:指定组件的 X 坐标,以父容器总宽度为单位 1,该值应该在 0.0~1.0 之间,其中 0.0 代表位于窗口最左边,1.0 代表位于窗口最右边,0.5 代表位于窗口中间。
rely:指定组件的 Y 坐标,以父容器总高度为单位 1,该值应该在 0.0~1.0 之间,其中 0.0 代表位于窗口最上边,1.0 代表位于窗口最下边,0.5 代表位于窗口中间。
width:指定组件的宽度,以 pixel 为单位。
height:指定组件的高度,以 pixel 为单位。
relwidth:指定组件的宽度,以父容器总宽度为单位 1,该值应该在 0.0~1.0 之间,其中 1.0 代表整个窗口宽度,0.5 代表窗口的一半宽度。
relheight:指定组件的高度,以父容器总高度为单位 1,该值应该在 0.0~1.0 之间,其中 1.0 代表整个窗口高度,0.5 代表窗口的一半高度。
bordermode:该属性支持“inside”或“outside” 属性值,用于指定当设置组件的宽度、高度时是否计算该组件的边框宽度。

事件绑定
command 绑定事件处理方法:简单的事件处理可通过 command 选项来绑定,该选项绑定为一个函数或方法,当用户单击指定按钮时,通过该 command 选项绑定的函数或方法就会被触发。
bind绑定事件处理方法:
简单的事件绑定方式虽然简单,但它存在较大的局限性:
程序无法为具体事件(比如鼠标移动、按键事件)绑定事件处理方法。
程序无法获取事件相关信息。
为了弥补这种不足,Python 提供了更灵活的事件绑定方式,所有 Widget 组件都提供了一个 bind() 方法,该方法可以为“任意” 事件绑定事件处理方法。示例代码如下:
#为左键单击事件绑定处理方法
bn.bind(’’, self.one)
#为左键双击事件绑定处理方法
bn.bind(’’, self.double)

打开本地文件管理器
使用***filedialog.askopenfilename()***可以打开电脑本地文件管理器,进行文件选择,执行该语句会返回文件所在路径

Entry和Text控件的用法及区别
Entry 和 Text 组件都是可接收用户输入的输入框组件,区别是 Entry 是单行输入框组件,Text 是多行输入框组件,而且 Text 可以为不同的部分添加不同的格式,甚至响应事件。
不管是 Entry 还是 Text 组件,程序都提供了 get() 方法来获取文本框中的内容;但如果程序要改变文本框中的内容,则需要调用二者的 insert() 方法来实现。 如果要删除 Entry 或 Text 组件中的部分内容,则可通过 delete(self,first,last=None) 方法实现,该方法指定删除从 first 到 last 之间的内容。
关于 Entry 和 Text 支持的索引,由于 Entry 是单行文本框组件,因此它的索引很简单,比如要指定第 4 个字符到第 8 个字符,索引指定为 (3,8) 即可。但 Text 是多行文本框组件,因此它的索引需要同时指定行号和列号,比如 1.0 代表第 1 行、第 1 列(行号从 1 开始, 列号从 0 开始),如果要指定第 2 行第 3 个字符到第 3 行第 7个字符,索引应指定为 (2.2,3.6)。此外,正如从前面程序所看到的,Entry 支持双向绑定,程序可以将 Entry 与变量绑定在一起,这样程序就可以通过该变量来改变、获取 Entry 组件中的内容。
Text 实际上是一个功能强大的“富文本”编辑组件,这意味着使用 Text 不仅可以插入文本内容,也可以插入图片,可通过 image_create(self, index, cnf={}, **kw) 方法来插入。Text 也可以设置被插入文本内容的格式,此时就需要为 insert(self, index, chars, *args) 方法的最后一个参数传入多个 tag 进行控制,这样就可以使用 Text 组件实现图文并茂的效果。此外,当 Text 内容较多时就需要对该组件使用滚动条,以便该 Text 能实现被动显示。为了让滚动条控制 Text 组件内容的滚动,实际上就是将它们进行双向关联。这里需要两步操作:
将 Scrollbar 的 command 设为目标组件的 xview 或 yview,其中 xview 用于水平滚动条控制目标组件水平滚动;yview 用于垂直读动条控制目标组件垂直滚动。
将目标组件的 xscrollcommand 或 yscrollcommand 属性设为 Scrollbar 的 set 方法。

Radiobutton和Checkbutton控件用法
Radiobutton 组件代表单选钮,该组件可以绑定一个方法或函数,当单选钮被选择时,该方法或函数将会被触发。为了将多个 Radiobutton 编为一组,程序需要将多个 Radiobutton 绑定到同一个变量,当这组 Radiobutton 的其中一个单选钮被选中时,该变量会随之改变;反过来,当该变量发生改变时,这组 Radiobutton 也会自动选中该变量值所对应的单选钮。单边钮除了可以显示文本,也可以显示图片,只要为其指定 image 选项即可。如果希望图片和文字同时显示也是可以的,只要通过 compound 边项进行控制即可(如果不指定 compound 选项,该选项默认为 None,这意味着只显示图片)。Checkbutton 就像开关一样,它支持两个值:开关打开的值和开关关闭的值。因此,在创建 Checkbutton 时可同时设置 onvalue 和 offvalue 选项为打开和关闭分别指定值。如果不指定 onvalue 和 offvalue,则 onvalue 默认为 1,offvalue 默认为 0。

Menu菜单
Tkinter 为菜单提供了 Menu 类,该类既可代表菜单条,也可代表菜单,还可代表上下文菜单(右键菜单)。简单来说,Menu 类就可以搞定所有菜单相关内容。
程序可调用 Menu 的构造方法来创建菜单,在创建菜单之后可通过如下方法添加菜单项:
add_command():添加菜单项。
add_checkbutton():添加复选框菜单项。
add_radiobutton():添加单选钮菜单项。
add_separator():添加菜单分隔条。

上面的前三个方法都用于添加菜单项,因此都支持如下常用选项:
label:指定菜单项的文本。
command:指定为菜单项绑定的事件处理方法。
image:指定菜单项的图标。
compound:指定在菜单项中图标位于文字的哪个方位。

扫描二维码关注公众号,回复: 8543520 查看本文章

内容转载自C语言中文网,侵删

发布了19 篇原创文章 · 获赞 0 · 访问量 287

猜你喜欢

转载自blog.csdn.net/qq_43670393/article/details/103939950