关闭

python——Tkinter的简单学习

559人阅读 评论(0) 收藏 举报
分类:

Python提供了开发图形用户界面(GUI)的各种方案。下面列出最重要如下:


Tkinter: Tkinter的是Tk的GUI工具包,与Python附带的Python接口。
wxPython: 这是一个开源的Python接口的wxWindows http://wxpython.org.
JPython: JPython的是一个用于Java的Python端口,

这使得Python脚本在本地机器上的无缝接入到Java类库http://www.jython.org.


Tkinter最大的特点是跨平台,缺点是性能不太好,执行速度慢。
还有许多没有列出其他接口。您可以通过网络找到它们.
===========================================================
使用Tkinter创建一个GUI应用程序是一件容易的事。所有你需要做的是执行以下步骤:
导入Tkinter模块.
创建GUI应用程序的主窗口.
添加上述部件之一或更多的GUI应用程序.
进入主事件循环的由用户触发每个事件响应
=========================================================
由于版本的问题,有的时候,你要在本地安装python-Tk
sudo apt-get install python-Tk
=======================================================
下面以一个例子说明
#!/usr/bin/python

import Tkinter
top = Tkinter.Tk()
#此处添加各种组件
top.mainloop()
===========================================================

创建这样一个窗口


====================================================
Tkinter的部件
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为部件.
目前有15种Tkinter的部件,例如Button,Lable

一些控件的用法可以参考一些前辈的,http://www.cnblogs.com/kaituorensheng/p/3287652.html#_label2
===========================================================
标准属性
例如Colors,Fonts
=========================================================
几何管理
Tkinter的部件有特定几何形状的管理方法,整个小部件父控件区域组织的目的。 Tkinter的公开以下几何经理类:包装,网格,位置.


pack() 方法-:这个的几何管理器组织之前,将其放置在他们的父widget块部件.
Pack使用很简单,就是w.pack(option)。常用的option有:
Side 表示把组件放到哪一边,TOP(上),BOTTOM(下),LEFT,RIGHT
Padx和pady  表示parcel的每一个边和组件的预留空间。
Ipadx和ipady,表示组件的每一个边和他包含的内容之间的预留空间。
Anchor表示在parcel放置组件的方式,缺省时CENTER。
grid()方法 - 这的几何管理器组织表状结构中的小部件的父部件.
place()方法 - 这个的几何管理器组织放置在一个特定的位置,在他们的父widget部件.


=========================================================================
小例子:
from Tkinter import *  #引入模块
#resize函数是用来改变文字大小的,当进度条改变时调用
def resize(ev=None):
	label.config(font='Helvetica -%d bold' % scale.get())
#config函数就是通过设置组件的参数来改变组件的,这里改变的是font字体大小
top=Tk()   #主窗口
top.geometry('600x400')  #设置了主窗口的初始大小600x400
label=Label(top,text='Hello world!',font='Helvetica -12 bold')  #设置标签字体的初始大小
label.pack(fill=Y,expand=1)
#scale创建进度条,设置
scale=Scale(top,from_=10,to=40,orient=HORIZONTAL,command=resize)
scale.set(12)  #设置起始位置
scale.pack(fill=X,expand=1)
quit = Button(top,text='QUIT',command=top.quit,activeforeground='white',
activebackground='red')
quit.pack()
mainloop()


===========================================================
结果截图:




============================================================
小例子二:
小小计算器,源代码如下:
=======================================================
#/usr/bin/python
# coding: utf-8


# 引入Tkinter库
from Tkinter import *


# 操作事件绑定的函数,这些函数中都会对显示的内容进行更新,因此显示内容display作为全局变量


# 更新显示内容函数,由按钮事件触发,将按钮内容添加到已显示内容后
def updateDisplay(buttonString):
    content = display.get()
    if content == "0":
        content = ""
    display.set(content + buttonString)


# 计算表达式的结果,表达式即为显示的内容,并将结果显示出来(需要换行并添加等于号)
def calculate():
    result = eval(display.get())
    display.set(display.get() + '=\n' + str(result))


# 清空操作,由清空按钮事件触发
def clear():
    display.set('0')


# 删除操作,由删除按钮事件触发,删除前一个字符
def backspace():
    display.set(str(display.get()[:-1]))


# 定义主窗口,设置窗口名称和大小200×320,并设置屏幕坐标为(300,300)
mainUI = Tk()
mainUI.title('Calculator')
mainUI.geometry('200x210+300+300')


# 设置显示内容,默认显示0
# 这里使用StringVar属于Tkinter库,在界面编程的时候,有时需要跟踪变量值的变化,
# 以保证值的变更随时可以显示在界面上。python无法直接做到,所以定义了一系列新的的对象,
# 例如StringVar、BooleanVar、DoubleVar、IntVar。
display = StringVar()
display.set('0')


# 添加计算器显示区域,使用Label,并设置背景色及大小
textLabel = Label(mainUI)
# 这里需要注意width宽度的单位,如果你在Label中显示文本,
# 那么这些选项将以文本的单位为定义按钮的尺寸。
# 如果你替而代之显示图象,那么按钮的尺寸将是像素(或其它的屏幕单位)。
textLabel.config(bg='grey', width=28, height=3, anchor = SE)
textLabel['textvariable'] = display


# 设置显示区域在Grid布局中的位置
textLabel.grid(row=0, column=0, columnspan=4)


# 添加按钮并放置到适当的区域
# 清空按钮,其中text为按钮上的文字,fg为按钮的字体颜色(bg为文字背景的按钮颜色),width为按钮宽度
# command参数为按钮事件绑定函数,绑定到clear()函数,按钮按下时触发
clearButton = Button(mainUI, text = 'C', fg = 'orange', width = 3, command = clear)
# 设置清空按钮的位置,行号为1,列号为0,即第二行第一列
clearButton.grid(row = 1, column = 0)


# 其他按钮位置,由于与清空按钮类似不再注释,请自行查看Grid中的位置,有的按钮采用lambda来生成匿名函数,原因是需要处理传入的参数
Button(mainUI, text = 'DEL', width = 3, command = backspace).grid(row = 1, column = 1)
Button(mainUI, text = '/', width = 3, command = lambda:updateDisplay('/')).grid(row = 1, column = 2)
Button(mainUI, text = '*', width = 3, command = lambda:updateDisplay('*')).grid(row = 1, column = 3)
Button(mainUI, text = '7', width = 3, command = lambda:updateDisplay('7')).grid(row = 2, column = 0)
Button(mainUI, text = '8', width = 3, command = lambda:updateDisplay('8')).grid(row = 2, column = 1)
Button(mainUI, text = '9', width = 3, command = lambda:updateDisplay('9')).grid(row = 2, column = 2)
Button(mainUI, text = '-', width = 3, command = lambda:updateDisplay('-')).grid(row = 2, column = 3)
Button(mainUI, text = '4', width = 3, command = lambda:updateDisplay('4')).grid(row = 3, column = 0)
Button(mainUI, text = '5', width = 3, command = lambda:updateDisplay('5')).grid(row = 3, column = 1)
Button(mainUI, text = '6', width = 3, command = lambda:updateDisplay('6')).grid(row = 3, column = 2)
Button(mainUI, text = '+', width = 3, command = lambda:updateDisplay('+')).grid(row = 3, column = 3)
Button(mainUI, text = '1', width = 3, command = lambda:updateDisplay('1')).grid(row = 4, column = 0)
Button(mainUI, text = '2', width = 3, command = lambda:updateDisplay('2')).grid(row = 4, column = 1)
Button(mainUI, text = '3', width = 3, command = lambda:updateDisplay('3')).grid(row = 4, column = 2)
Button(mainUI, text = '=', width = 3, bg = 'orange', height = 3,command = lambda:calculate()).grid(row = 4, column = 3, rowspan = 2)
Button(mainUI, text = '0', width = 10, command = lambda:updateDisplay('0')).grid(row = 5, column = 0, columnspan = 2)
Button(mainUI, text = '.', width = 3, command = lambda:updateDisplay('.')).grid(row = 5, column = 2)


# 进入主循环
mainUI.mainloop()


=================================================================
结果如图:


=================================================================


以上就是简要的一个对于Tkinter的总结。需要学习的还有很多,如果这里有什么需要补充改进或者有错的还希望指正!





1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:24158次
    • 积分:421
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:19篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论