Python Tkinter制作GUI

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

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

创建GUI的基本步骤:

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

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

组件:

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

[python]  view plain copy
  1. from tkinter import * #导入tkinter模块  
  2.   
  3. def resize(ev=None): #scale的回调函数  
  4.     labelDisplay.config(font='Helvetica -%d bold'%scale.get()) #修改labelDisplay的字体大小,当然其他信息也可以改,比如text  
  5.   
  6. root=Tk() #产生顶层窗口对象  
  7. root.title('Sample hello'#GUI名字  
  8. root.geometry('250x150+0+0'#250x150设置窗口初始大小,如果没有这个设置,窗口会随着组件大小的变化而变化,0+0表示窗口左上角出现在屏幕的位置()  
  9.   
  10. labelDisplay=Label(root, text='Hello World!', font='Helvetica -12 bold', \  
  11.                    bg='red'#创建一个Label,是要放置在root内的,文本为'Hello World!',还有字体与背景色  
  12. labelDisplay.pack(fill=None, expand=1, ipadx=5, ipady=5#将labelDisplay放置进root,如果没有这句话,则不会显示这个组件。fill, expand, ipadx, ipady的说明在下面  
  13.   
  14. labelDisplay1=Label(root, text='Hello World!', font='Helvetica -12 bold', \  
  15.                    bg='green')  
  16. labelDisplay1.pack(fill=BOTH, expand=1, padx=5, pady=5#padx, pady说明也在下面  
  17.   
  18. scale=Scale(root, from_=10, to=40, orient=HORIZONTAL, command=resize) #orient表示scale的放置方向,默认为vertical竖直的,command就是回调函数,为resize  
  19. scale.pack(fill=X, expand=0)  
  20.   
  21. btQuit=Button(root, text='Quit', command=root.quit, \ #回调函数为quit函数,这时Tk类自带的  
  22.               fg='blue', bg='yellow', \ #fg是前面的字体的颜色,bg是背景的颜色,Label组件也可以这样设置  
  23.               activeforeground='white', activebackground='red'#按下时的颜色  
  24. btQuit.pack(side=LEFT)  
  25.   
  26. print(root.pack_slaves()) #输出到当前代码处为止,所有在root上pack了的组件  
  27.   
  28. 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底部的所有空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值