python Tkinter学习

来源:互联网 发布:ep软件 编辑:程序博客网 时间:2024/05/17 09:32

1)Tcl/Tk version 8.5.
学习的版本:我用的是python2.7

In [2]: import TkinterIn [4]: Tkinter._test()

输出如图:
这里写图片描述

2) The root window –你的画板

from Tkinter import  *root = Tk()root.mainloop()

输出如图:
这里写图片描述
就是一个供你添加各种东西的根面板

第一行将Tkinter的所有(*)类、属性和方法导入到当前工作区中。第二行创建了类Tkinter.TK的实例。这将创建您在屏幕截图中看到的“根”窗口。按照惯例,Tkinter中的根窗口通常被称为“根”,但您可以用任何其他名称来调用它。第三行执行根对象的主循环(即事件循环)方法。mainloop方法是保持根窗口可见的原因。如果删除第三行,在脚本停止运行时,第2行创建的窗口将立即消失。这将发生得如此之快,以至于你甚至不会看到屏幕上出现的窗口。保持主循环运行也可以让程序运行,直到按下关闭按钮,退出主循环。
这三行生成根窗口,它将容纳所有其他图形组件。这些行构成了在Tkinter中开发的任何GUI应用程序的框架。所有的代码将使您的GUI应用程序功能将在第2行(新对象创建)和这段代码的第3行(mainloop)之间进行

3) Widgets—为你构建GUI程序的块

The syntax for adding a widget is as follows:wg=Widget-name (its container window,**configuration options)

示例如下:

from Tkinter import  *root =Tk()mylabel =Label(root,text="I am a label widget")mybutton = Button(root,text="I am a button")mylabel.pack()mybutton.pack()root.mainloop()

输出如图:
这里写图片描述
代码的描述如下所示:该代码为Label部件添加了一个新实例mylabel。第一个参数将根定义为它的父或容器。第二个参数将其文本选项配置为“I am a label widget”。我们同样定义了一个按钮小部件的实例。这也被绑定到根窗口作为它的父窗口。我们使用pack()方法,该方法本质上要求在窗口中定位标签和按钮小部件。我们将在几何管理任务下讨论pack()方法和其他相关概念。但是,您必须注意到,某些几何规范对于小部件在Toplevel窗口中显示是必不可少的。运行此代码将生成一个窗口,如下面的屏幕截图所示。它将有一个自定义标签和一个自定义按钮:

所有的小部件实际上都是来自它们各自的小部件类的对象。因此,像mybutton = Button(myContainer)这样的语句实际上从Button类中创建按钮实例。

每个小部件都有一组可以决定其行为和外观的选项。这包括诸如文本标签、颜色、字体大小等属性。例如,按钮小部件有管理其标签的属性,控制它的大小,改变它的前景和背景颜色,改变边框的大小,等等。

要设置这些属性,您可以在小部件创建时直接设置值,就像我们在前面的示例中所做的那样。或者,您可以通过使用. config()或. configure()方法来设置或更改小部件的选项。注意,. config()或. configure()方法是可互换的,并提供相同的功能。

您还可以在创建小部件的新实例的同一行上添加pack()方法。例如,考虑下面的代码:

mylabel =Label(root,text=“我是一个标签窗口小部件”)mylabel.pack()

如果你是直接实例化小部件,您可以编写两个线一起如下:

Label(root,text=“我是一个标签窗口小部件”).pack()

你可以保持小部件创建的引用(在第一个例子,mylabel),或者您可以创建一个小部件不保持任何参考(如第二个例子)。如果小部件内容可能在程序后期的某个阶段被某些操作修改,那么理想情况下应该保留引用。如果小部件状态在创建后保持静态,则不需要为小部件保留引用。另外,请注意调用pack()(或其他几何管理器)总是返回None。所以,考虑创建一个小部件保持引用并添加几何经理(比如pack())在同一行所示:

mylabel =Label(…).pack()  #mylabel =None

在这种情况下,你实际上是没有小部件创建一个引用,而是创建一个没有mylabel类型对象的变量。因此,当您稍后尝试通过引用修改小部件时,您会得到一个错误,因为您实际上是在尝试在一个没有类型的对象上工作。这是初学者犯的最常见的错误之一。

Tkinter包括21个核心小部件。这些都是如下:
oplevel widget
Label widget
Button widget
Canvas widget
Checkbutton widget
Entry widget
Frame widget
LabelFrame widget
Listbox widget
Menu widget
Menubutton widget
Message widget
OptionMenu widget
PanedWindow widget
Radiobutton widget
Scale widget
Scrollbar widget
Spinbox widget
Text widget
Bitmap Class widget
Image Class widget

添加小部件的格式与我们在前面的任务中讨论的一样。为了给您提供一种参考,这里有一些添加通用小部件的示例代码:

Label(parent, text=" Enter your Password:")    Button(parent, text="Search")Checkbutton(parent, text='RememberMe', variable=v, value=True)Entry(parent, width=30)Radiobutton(parent, text=Male, variable=v, value=1)Radiobutton(parent, text=Female, variable=v, value=2)OptionMenu(parent, var, "Select Country", "USA", "UK", "India", Others")Scrollbar(parent, orient=VERTICAL, command=mytext.yview)

创建所有先前提到的小部件的方法是相同的。大多数配置选项也将类似。然而,一些配置选项因小部件而异。例如,按钮和标签小部件将有一个配置文本的选项,但是滚动条没有文本配置选项。

要被程序的大小吓倒。相反,要查找用于初始化和显示所有小部件的公共模式。要重申,添加小部件的语法是:

mywidget = widget- name(containter,all widget-options)

注意到每个小部件的配置选项之间的细微差别,这取决于小部件初始化的类型。

我们添加一个Frame widget,叫做menubar。注意,框架小部件只是持有其他小部件的holder小部件。框架小部件非常适合将小部件组合在一起。添加框架的语法与所有其他小部件相同:

myframe = frame(root)myframe.pack()

将menubar框架作为容器保存,我们为它添加两个小部件,Menubutton和Menu。我们创建另一个框架并命名为myframe1。
保持myframe1为容器或父部件,我们七个小部件添加到它:Label,Entry,Buttion,Checkbutton,Radiobutton ,OptionMenu,Bitmap Class小部件。

然后,我们继续创建myframe2,另一个框架小部件。我们添加六个部件:‰Image Class,Listbox,Spinbox,Scale,LabelFrame和Message部件。

然后,创建myframe3,另一个框架小部件。我们向它添加了两个小部件,text和Scrollbar小部件。

最后我们创建最后一个帧,myframe4,另一个框架小部件。我们向它添加了两个小部件,Canvas和PanedWindow.

4) pack —几何管理器
Tkinter有几个其他的几何管理器。我看了别人的翻译是布局管理器。我百度翻译的。- -。

pack几何源于这样一个事实:它实际上是在主框架中可用的空间中包装小部件,而在主框架中可用小部件进行推送。包几何管理器将“从属部件”安装到“父空间”中。当打包从属部件时,包管理器区分三种空间:无人认领的空间、声称的但未使用的空间、被认领和使用的空间。

from Tkinter import *root = Tk()Button(root, text="A").pack(side=LEFT, expand=YES, fill=Y)Button(root, text="B").pack(side=TOP, expand=YES, fill=BOTH)Button(root, text="C").pack(side=RIGHT, expand=YES, fill=NONE, anchor=NE)Button(root, text="D").pack(side=LEFT, expand=NO, fill=Y)Button(root, text="E").pack(side=TOP, expand=NO, fill=BOTH)Button(root, text="F").pack(side=RIGHT, expand=NO, fill=NONE)Button(root, text="G").pack(side=BOTTOM, expand=YES, fill=Y)Button(root, text="H").pack(side=TOP, expand=NO, fill=BOTH)Button(root, text="I").pack(side=RIGHT, expand=NO)Button(root, text="J").pack(anchor=SE)root.mainloop()

输出如图:

花花绿绿的是我自己画的线。

(1) pack(side=LEFT, expand=YES, fill=Y)
当您在根框架中插入按钮时,它会捕捉到框架的最左侧区域,它会展开并填充Y维度。因为扩展和填充选项是在肯定的情况下指定的,它会声明它想要的所有区域并填充Y维度。如果你增加了根窗口的大小,你会注意到,这个按钮在向下的方向(沿着Y坐标)增加了,但是在窗口的一个侧面的增加不会导致按钮A的大小的水平增加。
(2)pack(side=TOP, expand=YES, fill=BOTH)
当您将下一个按钮B插入根窗口时,它会从剩余的区域中获取空间,但是将它自己对齐到顶部,并将可用区域填满,并填充可用空间的X和Y坐标。

(3)side=RIGHT, expand=YES, fill=NONE, anchor=NE)
第三个按钮,C,调整到剩余空间的右边。但是因为填充被指定为NONE,所以它只占用了足够的空间来容纳按钮内的文本。如果您展开根窗口,则按钮C不会改变它的大小。
(4)一些行中使用的锚属性提供了一种方法来定位一个相对于参考点的小部件。如果没有指定锚属性,则包管理器将小部件放在可用空间的中心或包装框中。其他允许的选项包括四个基本方向(N、S、E和W)和任意两个方向的组合。因此,锚属性的有效值是:中心(默认)、N、S、E、W、NW、NE、SW和SE。