Python学习笔记--Tkinter制作GUI

        Tkinter是一款非常简单而功能又很完善的的设计GUI的图形库。

        在windows下的Tkinter是默认安装的,只是在Python3.x中名字由Tkinter变为了tkinter,里面的函数名字都没变。

创建GUI的基本步骤:

import tkinter
使用tkinter.Tk()创建顶层窗口对象root,用来放置其他GUI组件
创建其他GUI组件,并放置到root中
实现这些组件的回调函数(当然有些不能交互,没有回调函数)
进入主事件循环

        Tkinter提供了两种坐标管理器,来帮助放置GUI组件:包packer,网格grid。packer中,自己需要设计组件的大小与对其方式,然后用packer放置,默认情况下,各组件从上往下放置。grid规定了一个网格坐标系,并依据网格来放置每个组件,组件的位置都是与网格相关的,比如在某网格的左上角NS方位。下面的例子均使用packer

组件:

        Tkinter中有15种组件,每种组件都有大量的默认参数,所以可以很方便的通过默认值实现基本功能。下面通过一个helloworld例子演示Button, Label, Scale组件的使用:(代码修改自core python programming)(Python3.3)

from tkinter import * #导入tkinter模块

def resize(ev=None): #scale的回调函数
    labelDisplay.config(font='Helvetica -%d bold'%scale.get()) #修改labelDisplay的字体大小,当然其他信息也可以改,比如text

root=Tk() #产生顶层窗口对象
root.title('Sample hello') #GUI名字
root.geometry('250x150+0+0') #250x150设置窗口初始大小,如果没有这个设置,窗口会随着组件大小的变化而变化,0+0表示窗口左上角出现在屏幕的位置()

labelDisplay=Label(root, text='Hello World!', font='Helvetica -12 bold', \
                   bg='red') #创建一个Label,是要放置在root内的,文本为'Hello World!',还有字体与背景色
labelDisplay.pack(fill=None, expand=1, ipadx=5, ipady=5) #将labelDisplay放置进root,如果没有这句话,则不会显示这个组件。fill, expand, ipadx, ipady的说明在下面

labelDisplay1=Label(root, text='Hello World!', font='Helvetica -12 bold', \
                   bg='green')
labelDisplay1.pack(fill=BOTH, expand=1, padx=5, pady=5) #padx, pady说明也在下面

scale=Scale(root, from_=10, to=40, orient=HORIZONTAL, command=resize) #orient表示scale的放置方向,默认为vertical竖直的,command就是回调函数,为resize
scale.pack(fill=X, expand=0)

btQuit=Button(root, text='Quit', command=root.quit, \ #回调函数为quit函数,这时Tk类自带的
              fg='blue', bg='yellow', \ #fg是前面的字体的颜色,bg是背景的颜色,Label组件也可以这样设置
              activeforeground='white', activebackground='red') #按下时的颜色
btQuit.pack(side=LEFT)

print(root.pack_slaves()) #输出到当前代码处为止,所有在root上pack了的组件

mainloop() #or root.mainloop()

        fill, expand属性挺难表述的,下面全是个人见解:

        每个组件都有自己的最小尺寸,正好将其内容全部包括。如:Label就是将其text包括。这时,如果手动设置的root尺寸偏大,或者各组件大小不统一而无法完全利用root的空间,组件放置进root后,周围会有额外的空间,如果不设置fill或者expand的话,这些额外空间是不会被使用的。fill可以被设置为X, Y, BOTH,在fill填充的时候,如果当前方向没有其他组件,则直接将当前方向的所有额外空间填满;如果有不止一个组件,则会比较所有组件的expand值,如果都为0,则都不会占据额外空间,如果有些组件的expand为1,则这些所有的expand的值为1的组件平分额外空间。注意:设置过side属性的组件的expand值会强制为1,不论是否显式设置expand,且fill属性无效,且组件根据side占据的空间的另一边(左边或者右边)是空的,可以放其他组件,且与这个组件水平位置相同。

        padx, pady表示设置组件的外围的填充,表示组件外围有空白,组件的尺寸会变大。

        ipadx, ipady表示设置组件的内部填充,表示组件的text或内部的其他GUI到组件边界(未设置padx, pady时的边界)的距离,组件尺寸变大。

        side,可取值为LEFT, RIGHT,表示组件放到root内部的左边或者右边。会占据组件出现之处到root底部的所有空间。

Python学习笔记--Tkinter制作GUI_第1张图片

你可能感兴趣的:(Python)