canvas教程

python学习笔记14--用Tkinter实现GUI编程

字号+ 作者:H5之家 来源:H5之家 2017-08-15 17:00 我要评论( )

CSDN知识库,按照技术领域和知识结构对海量技术资源进行筛选整理,并通过相关机制进行审核收录。保证入库知识的系统性与优质性。并且所含技术知识图谱有清晰的学

前面我们学习了turtle绘制图形文字的一些用法,这一节主要学习Tkinter。Tkinter是python进行GUI编程的高效工具,类似于VC中的MFC,集成了许多控件,如按钮、标签、菜单、文本框等。前面我们在terminal中用sudo apt-get install python-tk安装了Tkinter,所以在py文件中加上from Tkinter import * (也有的是from tkinter import *),即可使用其中的控件和函数。

1. Tkinter入门

首先,举一个小例子:

#coding=utf-8 from Tkinter import * def processOk(): print ("OK button is clicked.") def processCancel(): print ("Cancel button is clicked") # 创建一个窗口 window = Tk() # 创建两个按钮 btOk = Button(window,text = "OK", fg = "red", command = processOk) btCancel = Button(window,text = "cancel", bg = "yellow", command = processCancel) # 将按钮置在窗口上 btOk.pack() btCancel.pack() # 创建一个事件循环,监测事件发生,直到窗口关闭 window.mainloop() 这个例子的运行结果为:


点击OK按钮,会在控制台显示OK button is clicked,点击取消按钮亦是。

1)例子中btOk = Button(window, text = "OK", fg = "red", command = processOk)是创建一个按钮,其中第一个参数,通常是该控件的父容器,这里指的是该button是在window中的;第二个参数是该按钮的显示内容;第三个参数是前景色(对应的bg为背景色,见第二个按钮创建);第四个参数command,是指当鼠标点击这个按钮时触发的事件函数,这里是processOK函数。

2)btOk.pack()是将按钮在window中一行接着一行布局。

3)window.mainloop()这句创建一个事件循环,它会不停的捕捉在window内的事件直到window关闭,如果触发某个函数则执行,如本例中的点击按钮操作。


2. Tkinter的各种GUI控件

这一节介绍几个常见的Tkinter控件,python中叫做widgets。

Button:简单的按钮,用来执行触发操作,如上例;

Canvas:帆布,结构化的图形界面,可以在上面绘制各种图形,进行图形编辑;

Checkbutton:复选框;

Entry:文本编辑区域,类似于MFC中的text field或text box;

Frame:框架,用来包含其他控件,主要用于控制界面布局;

Label:文本或图片显示;

Menu:菜单;

Menubutton:菜单按钮;

Message:显示文本,和Label控件类似,但是Message可以根据文本的长度自动调整显示;

Radiobutton:单选按钮;

Text:格式化文本显示,允许编辑文本的显示风格和属性。

下面举个例子(其中用到了Checkbutton、Radiobutton、Frame、Entry、Label、Message、Text、Button控件):

#coding=utf-8 from Tkinter import * class WidgetsDemo: def __init__(self): window = Tk() # 创建一个窗口 window.title("Widgets Demo") # 设置标题 frame1 = Frame(window) # 创建一个框架 frame1.pack() # 将框架frame1放置在window中 self.v1 = IntVar() # 创建一个复选框,如果选中则self.v1为1,否则为0,当点击cbtBold时,触发processCheckbutton函数 cbtBold = Checkbutton(frame1,text="Bold",variable=self.v1, command=self.processCheckbutton) self.v2 = IntVar() # 创建两个单选按钮,放置在frame1中,按钮文本是分别是Red和Yellow,背景色分别是红色和黄色, # 当rbRed按钮被选中时self.v2为1,当rbYellow按钮被选中时,self.v2为2,按钮被点击时触发processRadiobutto函数 rbRed = Radiobutton(frame1,text="Red",bg="red", variable=self.v2,value=1, command=self.processRadiobutton) rbYellow = Radiobutton(frame1,text="Yellow",bg="yellow", variable=self.v2,value=2, command=self.processRadiobutton) # grid布局 cbtBold.grid(row=1,column=1) rbRed.grid(row=1,column=2) rbYellow.grid(row=1,column=3) frame2 = Frame(window) # 创建框架frame2 frame2.pack() # 将frame2放置在window中 label = Label(frame2,text="Enter your name: ") # 创建标签 self.name = StringVar() # 创建Entry,内容是与self.name关联 entryName = Entry(frame2,textvariable=self.name) # 创建按钮,点击按钮时触发processButton函数 btGetName = Button(frame2,text="Get Name", command=self.processButton) # 创建消息 message = Message(frame2,text="It is a widgets demo") # grid布局 label.grid(row=1,column=1) entryName.grid(row=1,column=2) btGetName.grid(row=1,column=3) message.grid(row=1,column=4) # 创建格式化文本,并放置在window中 text = Text(window) text.pack() text.insert(END,"Tip\nThe best way to learn Tkinter is to read") text.insert(END,"these carefully designed examples and use them") text.insert(END,"to create your applications.") # 监测事件直到window被关闭 window.mainloop() # 复选框点击按钮函数 def processCheckbutton(self): print ("Check button is:" + ("checked" if self.v1.get() == 1 else "unchecked")) # 单选按钮点击函数 def processRadiobutton(self): print (("Red" if self.v2.get() == 1 else "Yellow") + " is selected.") # Get Name按钮点击函数 def processButton(self): print ("Your name is " + self.name.get()) WidgetsDemo() 该例子的运行结果为:

1)self.v1 = IntVar()表示v1是Int型变量;

2)cbtBold = Checkbutton()这一句中variable = self.v1表示与v1关联,默认情况为当该按钮选中时,v1=1,否则v1=0;rbRed = Radiobutton()这一句中也有类似的,其中value=1表示该按钮选中是v2=1,若选中rbYellow,则v2=2;

3)cbtBold.grid(row=1,column=1)与之前的pack()函数一样,都是布局函数,不过这里是在Frame中划分行列,并在特定行列显示;

4)text.insert(END," ")是指向Text中插入格式化文本,其中END是指将文本插入到当前文本的后面;

5)另外,可以像下面这样修改控件的参数:rdRed["text"] = "This Is Red" ;rdRed["cursor"] = "plus"(光标到这里变成十字);

6)self.name.get()函数可以获得变量内容。


3. Canvas

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Unity3D之UGUI学习EventSystem

    Unity3D之UGUI学习EventSystem

    2017-07-16 08:02

  • 微信开发者平台,微信开发者社区,微信小程序开发者社区

    微信开发者平台,微信开发者社区,微信小程序开发者社区

    2016-12-24 12:00

  • 【干货】Python爬虫/文本处理/科学计算/机器学习/数据挖掘兵器谱

    【干货】Python爬虫/文本处理/科学计算/机器学习/数据挖掘兵器谱

    2016-04-19 10:00

  • 9秒课堂专注于游戏开发,微信开发,前端开发,后端开发的在线免

    9秒课堂专注于游戏开发,微信开发,前端开发,后端开发的在线免

    2016-01-20 09:01

网友点评