您的位置:首页 > 编程语言 > Python开发

Python Tkinter制作GUI

2013-12-18 22:36 435 查看
Tkinter是一款非常简单而功能又很完善的的设计GUI的图形库。

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

创建GUI的基本步骤:

[python] view
plaincopy

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)

[python] view
plaincopy

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底部的所有空间。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: