#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#图形界面
#Tkinter封装了访问TK的接口;
#TK是一个图形库,支持多个操作系统,使用Tcl语言开发;
#Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。
from tkinter import *
import tkinter.messagebox as messagebox
#从frame派生一个application类,这是所有Widget的父容器,Frame就是屏幕上的一块矩形区域,多用作容器来布局窗体:
class Application(Frame):
def __init__(self,master=None):
Frame.__init__(self,master) #表示运行Frame.__init__()函数,入参是self和master,self指向的是创建的实例本身,并且调用时,不用传递该参数
self.pack() #表示运行pack()方法 ,pack是一种布局方法
self.createWidgets() #表示运行createWidgets()方法
def createWidgets(self):
self.nameInput=Entry(self) #表示属性nameInput是一个文本框
self.nameInput.pack() #运行属性的方法pack()
self.alertButton=Button(self,text='Hello',command=self.hello) #text显示文本内容,command指定Button的事件处理函数
self.alertButton.pack()
'''self.helloLabel=Label(self,text='Hello,world!')
self.helloLabel.pack()
self.quitButton=Button(self,text='Quit',command=self.quit)
self.quitButton.pack()'''
def hello(self):
name=self.nameInput.get() or 'world'
messagebox.showinfo('Message','Hello,%s' % name)
#在GUI中,每个Button、Label、输入框等,都是一个widget 。 Frame则是可以容纳其他widget的widget,所有的widget组合起来就是一棵树。
#pack()方法把widget加入到父容器中,并实现布局。pack()是最简单的布局,grid()可以实现复杂的布局。
#在createWidgets()方法中,我们创建一个Label和一个Button,当Button被点击时,触发self.quit()使程序退出。
#第三步,实例化Application,并启动消息循环:
app=Application()
#设置窗口标题
app.master.title('Hello World')
#主消息循环:
app.mainloop()
#GUI程序的主线程负责监听来自操作系统的消息,并依次处理每一条消息。因此,如果消息处理非常耗时,就需要在新线程中处理。
#输入文本
#加入文本框,让用户可以输入文本,然后点击按钮,弹出消息对话框。
#当用户点击按钮时,触发hello(),通过self.nameInput.get()获得用户输入的文本后,使用thMessageBox.showinfo(),可以弹出消息对话框。
#创建一个GUI程序
'''
1.导入Tkinter模块
2、创建控件
3、指定这个控件的master,即这个控件属于哪一个
4、告诉GM(geometry manager) 有一个控件产生了
'''
#Tkinter提供各种控件,如按钮、标签和文本框,这些控件通常被称为控件或部件。
'''
Button 按钮控件,在程序中显示按钮
Canvas 画布控件,显示图形元素如线条或文本
Checkbutton 多选框控件,用于在程序中提供多项选择框
Entry 输入控件,用于显示简单的文本内容
Frame 框架控件,在屏幕上显示一个矩形区域,多用作容器
Label 标签控件,可以显示文本和位图
Listbox 列表框控件,在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton 菜单按钮控件,用于显示菜单项。
Menu 菜单控件,显示菜单栏、下拉菜单和弹出菜单
Message 消息控件,用来显示多行文本,与label比较类似。
Radiobutton 单选按钮控件,显示一个单选的按钮状态。
Scale 范围控件,显示一个数值刻度,为输出限定范围的数字区间
Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。
Text 文本控件,用于显示多行文本。
Toplevel 容器控件,用来提供一个单独的对话框,和Frame比较类似
Spinbox 输入控件,与Entry类似,但是可以指定输入范围值
PanedWindow 窗口布局管理的插件,可以包含一个或多个子控件。
LabelFrame 简单的容器控件。常用于复杂的窗口布局
tkMessageBox 用于显示迷你应用程序的消息框。
'''
#标准属性,也就是所有控件的共同属性,如大小,字体和颜色等等。
'''
Dimension 控件大小
Color 控件颜色
Font 控件字体
Anchor 锚点
Relief 控件样式
Bitmap 位图
Cursor 光标
'''
#几何管理
#Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,
'''
pack() 包装
grid() 网格
place() 位置
'''