Tkinter-创建窗口实例

Tkinter - 创建窗口实例 目录树

    • Tkinter组件继承关系
    • 窗口、容器、组件关系
    • 创建Tk窗口示例

Tkinter-创建窗口实例
来自http://www.tpleina.com/2019/05/2349786732.html

Tkinter组件继承关系

在创建Tkinter实例之前,先说一下Tkinter组件之间继承关系
Tkinter-创建窗口实例_第1张图片

说明

  • Tkinter 有两个根父类,它们直接继承了object类
    • Misc:所有组件的根父类
    • Wm:提供了一些与窗口管理器通信的功能函数
    • 对于 Misc 和 Wm 两个基类而言,它们是所有Tkinter组件的父类,所有组件都可以直接使用它们的方法
  • Tk:是Misc 和 Wm 派生的子类 ,它是应用程序的主窗口,Tkinter GUI编程通常都需要直接或间接使用Tk类
  • BaseWidget:是所有组件的基类
  • Widget:代表一个通用的 GUI 组件,它继承于BaseWidget父类,所有组件都是 Widget 的子类
  • Pack、Place、Grid:是布局管理器类,负责管理所包含的组件的大小和位置摆放,并派生出来Widget子类

组件介绍

应用组件类 中文名称 说明
Toplevel 顶层 容器类,有点类似于窗口,为其他组件提供单独的容器
Frame 容器 容器类,用于装载其它 GUI 组件
LabelFrame 带标签的容器 带标签的容器组件,类似于Frame,但能添加标题
Entry 单行输入框 用户可输入内容
Text 多行文本框 显示多行文本
Label 标签 显示不可编辑的文本或图标
Checkbutton 复选框 复选框
Radiobutton 单选钮 单选钮
Button 按钮 按钮组件
Listbox 列表框 列表框
Scale 滑动条 上下、左右滑动条
Spinbox 微调选择器 通过向上、向下箭头选择不同的值
Scrollbar 滚动条 提供滚动功能
Message 消息框 弹出消息框
PanedWindow 分区窗口 分区窗口
Menu 菜单 菜单组件
Menubutton 菜单按钮 用来包含菜单的按钮(包括下拉式、层叠式等)
OptionMenu 菜单按钮 Menubutton 的子类,也代表菜单按钮,可通过按钮打开一个菜单
Canvas 画布 提供绘图功能,如绘制直线、矩形、椭圆、多边形、位图等

窗口、容器、组件关系

任何窗口可由若干个容器组成,而容器里填充着各种基本组件,通过设置基本组件的属性(大小、位置等),便可形成有交互能力用户图形界面

  • 一个窗口由一个或多个容器组成
  • 每个容器又由一个或多个组件组成
  • 窗口、容器、组件构成了一个完整的用户图形界面

创建Tk窗口示例

# -*- coding:utf-8 -*-
from Tkinter import * 

if __name__ == "__main__":
    # 创建Tk对象,即主窗口
    mw = Tk()
    # 设置窗口标题
    mw.title('Tkinter入门示例')
    # 创建Label标签,第一个参数意思是,将label标签对象加入主窗口mw中
    w = Label(mw, text="Hello World!Hello Tkinter!")
    # 布局设置
    w.pack()
    # 启动主窗口循环
    mw.mainloop()

示例代码创建了两个对象Tk 和 Label,Tk是主窗口,Label是文本标签,将Label对象加入到Tk主窗口中

有关Tkinter包导入,在Python 2.x 使用from Tkinter import *
在Python 3.x 使用from Tkinter import *

另一种方式是不直接使用Tk,只要创建Frame的子类,其子类会自动创建Tk对象作为窗口,示例如下:

# -*- coding:utf-8 -*-
from Tkinter import *

class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        # 调用initWidgets()初始化界面
        self.initWidgets()

    def initWidgets(self):
        # 创建Label组件,第一个参数将该Label放入主窗口
        w = Label(self)
        # 创建位图
        self.bm = PhotoImage(file = 'logo.png')
        # 设置Label背景图片
        w['image'] = self.bm
        w.pack()
        # 创建Button组件,第一个参数将该Button放入主窗口
        okButton = Button(self, text="确定")
        # 设置Button的背景色
        okButton['background'] = 'green'
        okButton.pack()

if __name__ == "__main__":
    # 创建App对象
    app = App()
    # Frame有个默认的master属性,该属性值是Tk对象(窗口)
    print(type(app.master))
    # 设置窗口标题
    app.master.title('Tkinter入门示例')
    # 启动主窗口的消息循环
    app.mainloop()

补充说明

  • 初始化窗口分三个过程:创建组件、添加组件、配置组件
  • 配置组件,可以在初始化配置,也可以在创建完成后配置,如:
    • 初始化配置 okbtn = Button(self, text="确定")
    • 创建后配置 okbtn['text'] = "确定",以字典形式配置,完全等价
    • 还可以这样配置 okbtn.configure(text = "确定"), 完全等价,自由切换使用
  • 创建GUI组件很简单,需要至少指定一个参数,用于指定GUI组件属于哪个容器(Tk组件例外,因为该组件代表顶级窗口)
  • 程序在创建任意Widget组件时,没有指定master属性(即创建Widget组件时第一个参数传入None),那么程序会自动为该Widget组件创建一个Tk窗口

你可能感兴趣的:(Python,Tkinter教程)