Python图形GUI工具包tkinter如何调整元件在窗口中的位置几何布局管理

2023-05-16

Tkinter中的GUI总是有一个root窗口,不管你是主动或者别动获得.主窗口就是你的程序开始运行的时候创建的,在主窗口中你通常是放置了你主要的部件.另外,Tkinter脚本可以依据需要创建很多独立的窗口,主要的方法就是通过创建Toplevel对象。
每一个Toplevel对象都创建一个显示的窗口,不需要通过mainloop方法调用。

关于Toplevel和Tk部件:
一个Toplevel象一个Frame,并且可以通过额外的方法来让你处理Toplevel窗口的属性。
而Tk更像一个Toplevel,但是它用于描绘程序主窗口的外貌。

Tkinter GUI都是按照层次来创建的,默认你可以有一个根窗口(root window).

一,Tkinter介绍 Tkinter是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口。Tkinter不是唯一的python图形编 程接口,但是是其中比较流行的一个。最大的特点是跨

一,Tkinter介绍

Tkinter 是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口。Tkinter不是唯一的python图形编程接口,但是是 其中比较流行的一个。最大的特点是跨平台,缺点是性能不太好,执行速度慢。

一 般使用Tkinter的方法是:

From Tkinter import *

或 者: import Tkinter 两者的区别我们前面讲模块的时候已经说过了。

二,Tkinter的使用。

先 看一下GUI程序的开发,熟悉MFC的朋友应该不会陌生。在GUI程序中,我们会有一个顶层窗口,在这个顶层窗口上可以包括所有的小窗口对象,像标签,按 钮,列表框等等,也就是说顶层窗口时我们放置其他窗口或者控件的地方。我们用下面的语句可以创建一个顶层窗口,或者叫根窗口:

Import Tkinter

top = Tkinter.Tk()

(如 果前面是用的from Tkinter import * ,那么Tk()就够了)

然 后我们就可以在这个根窗口上设置“组件”了。通常这些组件会有一些相应的行为,比如鼠标点击,按下等等,这些称为事件,而程序会根据这些时间采取相应的反 应,称为回调。这个过程成为事件驱动。

所 有的创建和放置完毕后,就立刻进入主循环,代码如下:

Tkinter.mainloop( )

Tk 的组件有很多,不可能一一介绍,通过一个小例子看看其中一个标签的使用吧。

>>> import Tkinter

>>> top = Tkinter.Tk()

>>> label = Tkinter.Label(top,text=’Hello World’)

>>> label.pack()

>>> Tkinter.mainloop()

运 行结果就是

下 面解释一下:
   第一行,是导入模块。

第 二行,创建主窗口。

第 三行,创建label标签,它是有Tkinter的一个方法Label来实现的,关于Label的帮助可以help一下。

第 四行,pack()是用来管理和显示组件的,它的参数我们以后再说。

第 五行,mainloop()进入主循环。剩下的事就系统的了。

下 面看看组件的配置。Tk中的每一个组件都有很多option,通过改变这些option可以改变组件的外观,比如显示的内容,颜色,大小,位置,事件处理 函数等。

比 如: w=label(root,text=’hello’,fg=’red’)

创 建一个w,第一个参数时他的master widget,是root,所有参数都有默认的。我们可以用默认的来创建,w.cget(option)得到一个option的值。同样可以用 w.config(option=’’)来设置某个参数的值。

三,Tkinter的几何管理器。

熟 悉GUI编程的人知道,放好每个组件的是很繁琐的,不仅要调整自身大小,还要

整 和其他组件的相对位置。Tk提供了三个管理器来帮助我们:Pack  Grid  Place

1 pack

Pack 使用很简单,就是w.pack(option)。常用的option有:

Side 表示把组件放到哪一边,TOP(上),BOTTOM(下),LEFT,RIGHT

Padx 和pady  表示parcel的每一个边和组件的预留空间。

Ipadx 和ipady,表示组件的每一个边和他包含的内容之间的预留空间。

Anchor 表示在parcel放置组件的方式,缺省时CENTER。

2 grid

使 用方法和pack类似。

3 place

精 确的摆放一个组件的位置,一般不太用。

关 于这个三个的详细使用和算法可以参考相关资料。

下 面看最后一个例子:

先 看一下结果。

通过拖动进度条而改变文字大小。

看 一下代码:

from Tkinter import *  #引入模块

#resize函数是用来改变文字大小的,当进度条改变时调用

def resize(ev=None):

label.config(font=’Helvetica -%d bold’ % scale.get())

#config函数就是通过设置组件的参数来改变组件的,这里改变的是font字体大小

top=Tk()   #主窗口

top.geometry(’600×400′)  #设置了主窗口的初始 大小600×400

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()

所有的 Tkinter 组件都包含专用的几何管理方法,这些方法是用来组织和管理整个父配件区中子配件的布局的。 Tkinter 提供了截然不同的三种几何管理类: pack 、 grid 和 place 。 pack() pac

 

 

函数名描述
slaves()以列表方式返回本组件的所有子组件对象。
propagate(boolean)设置为True表 示父组件的几何大小由子组件决定(默认值),反之则无关。
info()返回pack提 供的选项所对应得值。
forget()Unpack组 件,将组件隐藏并且忽略原有设置,对象依旧存在,可以用pack(option, …),将其显示。
grid_remove () 

 

 

所有的Tkinter组件都包含专用的几何管理方法,这些方法是用 来组织和管理整个父配件区中子配件的布局的。Tkinter提 供了截然不同的三种几何管理类:pack、grid和place。

 

 
pack()

       pack几何管理采用块的方式组织配件,在快速生成界面设计中广泛采用,若干组件简单的布局, 采用pack的代码量最少。pack几何管理程序根据组件创建生成的顺序将组件添加到父组 件中去。通过设置相同的锚点(anchor)可以 将一组配件紧挨一个地方放置,如果不指定任何选项,默认在父窗体中自顶向下添加组件。

      使用pack()布局的通用公式为:

      WidgetObject.pack(option, …)

      pack方 法提供了下列option选项,选项可以直接赋值 或以字典变量加以修改:

 

名称描述取值范围
expand当值为“yes”时,side选项无效。组件显示在父配件中心位置;若fill选项为”both”,则填充父组件的剩余空间。“yes”, 自然数, “no”, 0

 (默认值为“no”或0)

fill填充x(y)方向上的空间,当 属性side=”top”或”bottom”时,填充x方向;当属性side=”left”或”right”时, 填充”y”方向;当expand选项为”yes”时,填充父组件的剩余空间。“x”, “y”, “both”

(默认值为待选)

ipadx, ipady组件内部在x(y)方向上填充 的空间大小,默认单位为像素,可选单位为c(厘 米)、m(毫米)、

i(英寸)、p(打印机的点,即1/27英寸),用法为在值后加以上一个后缀既可。

非负浮点数

(默认值为0.0)

padx, pady组件外部在x(y)方向上填充 的空间大小,默认单位为像素,可选单位为c(厘 米)、m(毫米)、

i(英寸)、p(打印机的点,即1/27英寸),用法为在值后加以上一个后缀既可。

非负浮点数

(默认值为0.0)

side定义停靠在父组件的哪一边上。“top”, “bottom”, “left”, “right”

(默认为”top”)

before将本组件于所选组建对象之前pack, 类似于先创建本组件再创建选定组件。已经pack后的组件对象
after将本组件于所选组建对象之后pack, 类似于先创建选定组件再本组件。已经pack后的组件对象
in_将本组件作为所选组建对象的子组件,类似于指定本组件的master为 选定组件。已经pack后的组件对象
anchor对齐方式,左对齐”w”,右对 齐”e”,顶对齐”n”,

底对齐”s”

“n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”

(默认为” center”)

注:以上选项中可以看出expand、fill和side是相互影响的。

典型例子:(默认引用为from Tkinter import *)

       单组件填充满父组件:

              text = Text(root, …)

text.pack(expand=YES, fill=”both”)           Tkitkinter模块提供了一系列大写值,其等价于字符型小写值,即Tkinter,YES  = =  “yes”

      

多组件布局(从左往右):                      默认布局是从上往下。

              btn = Button(root, …)

              btn.pack(side=LEFT, padx=<chmetcnv unitname=”C” sourcevalue=”4″ hasspace=”False” negative=”False” numbertype=”1″ tcsc=”0″ w:st=”on”></chmetcnv>4c)                x轴左右拓展4厘 米。

              Text(root, …).pack(side=LEFT)

 


       pack类提供了下列函数:

 

函数名描述
slaves()以列表方式返回本组件的所有子组件对象。
propagate(boolean)设置为True表示父组件的几 何大小由子组件决定(默认值),反之则无关。
info()返回pack提供的选项所对应 得值。
forget()Unpack组件,将组件隐藏 并且忽略原有设置,对象依旧存在,可以用pack(option, …), 将其显示。
location(x, y)x, y为以像素为单位的点, 函数返回此点是否在单元格中,在哪个单元格中。返回单元格行列坐标,(-1, -1)表示不在其中。
size()返回组件所包含的单元格,揭示组件大小。

 

grid()

grid几何管理采用类似表 格的结构组织配件,使用起来非常灵活,用其设计对话框和带有滚动条的窗体效果最好。grid采 用行列确定位置,行列交汇处为一个单元格。每一列中,列宽由这一列中最宽的单元格确定。每一行中,行高由这一行中最高的单元格决定。组件并不是充满整个单 元格的,你可以指定单元格中剩余空间的使用。你可以空出这些空间,也可以在水平或竖直或两个方向上填满这些空间。你可以连接若干个单元格为一个更大空间, 这一操作被称作跨越。创建的单元格必须相临。


       使用grid()布局的通用公式为:

       WidgetObject.grid(option, …)

 


       grid方 法提供了下列option选项,选项可以直接赋值 或以字典变量加以修改:

 

名称描述取值范围
column组件所置单元格的列号。自然数(起始默认值为0,而后 累加)
columnspan从组件所置单元格算起在列方向上的跨度。自然数(起始默认值为0)
ipadx, ipady组件内部在x(y)方向上填充 的空间大小,默认单位为像素,可选单位为c(厘 米)、m(毫米)、

i(英寸)、p(打印机的点,即1/27英寸),用法为在值后加以上一个后缀既可。

非负浮点数

(默认值为0.0)

padx, pady组件外部在x(y)方向上填充 的空间大小,默认单位为像素,可选单位为c(厘 米)、m(毫米)、

i(英寸)、p(打印机的点,即1/27英寸),用法为在值后加以上一个后缀既可。

非负浮点数

(默认值为0.0)

row组件所置单元格的行号。自然数(起始默认值为0,而后 累加)
rowspan从组件所置单元格算起在行方向上的跨度。自然数(起始默认值为0)
in_将本组件作为所选组建对象的子组件,类似于指定本组件的master为 选定组件。已经pack后的组件对象
sticky组件紧靠所在单元格的某一边角。“n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”

(默认为” center”)

典型例子:(默 认引用为from Tkinter import *)

       单组件填充满父组件:

              text = Text(root, …)

root.rowconfigure(0, weight=1)

root.columnconfigure (0, weight=1)        可 以可以看出,用grid填充不如pack方便。

      

多组件布局(滚动条):                        效果肯定是3种布 局方式中最好的。

              text = Text(root, …)

text.grid()

# 纵 向

              sb = Scrollbar(root, …)

        sb.grid(row=0, column=1, sticky=’ns’)

        text.configure(yscrollcommand=sb.set)

        sb.configure(command=text.yview)

              # 横向

        sb = Scrollbar(root, orient=’horizontal’, …)

        sb.grid(row=1, column=0, sticky=’ew’)

        text.configure(xscrollcommand=sb.set)

        sb.configure(command=text.xview)



转自:http://blog.shouji-zhushou.com/python%E5%9B%BE%E5%BD%A2%E5%B7%A5%E5%85%B7%E5%8C%85tkinter%E4%B8%AD%E5%A6%82%E4%BD%95%E8%B0%83%E6%95%B4%E5%85%83%E4%BB%B6%E5%9C%A8%E7%AA%97%E5%8F%A3%E4%BD%8D%E7%BD%AE/


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python图形GUI工具包tkinter如何调整元件在窗口中的位置几何布局管理 的相关文章

  • 串级PID控制四轴飞行状态-分析

    参考网页 xff1a http blog csdn net nemol1990 article details 45131603 一 概念 单极PID xff1a 当你知道系统当前状态和期望状态后 xff0c 如何将系统从当前状态调整到期望
  • Ubuntu18.04安装Nvidia显卡驱动,CUDA+CUDNN,完整Qt,编译安装OpenCV4.1.1 with CUDA and Qt

    目录 N卡无法开机问题一 安装Nvidia显卡驱动1 禁用安全引导2 禁用默认驱动程序3 添加Nvidia驱动源4 安装驱动 二 安装CUDA和CUDNN1 下载2 安装3 配置环境变量4 测试CUDA5 下载 xff0c 安装CUDNN
  • 纯C语言实现仿C++STL泛型链表

    声明 本代码完全开源 xff0c 可以用于任意用途 xff0c 但代码并未做完善的测试 xff0c 性能也不能保障 xff0c 主要用于初学者学习 源码链接 xff1a GitHub 一 原理 普通的单向链表的原理就是一个节点存储着数据和指
  • Ubuntu上使用CLion开发STM32,并使用JLink下载、调试

    目录 一 环境准备二 下载STM32CubeMX固件库三 使用STM32CubeMX创建工程四 CLion配置五 CMake简单操作和添加DSP库CMake简单操作添加DSP库 五 调试时查看外设寄存器 六 使用JLinkGDBServer
  • C++进阶——STL源码之迭代器(iterators)

    STL迭代器 在 STL 编程中 xff0c 容器和算法是独立设计的 xff0c 即数据结构和算法是独立设计的 xff0c 连接容器和算法的桥梁就是迭代器了 xff1a 迭代器是一种行为类似指针的对象 xff0c 而指针的各种行为中最常见也
  • C++基础——STL常见问题总结

    1 STL由哪些组件组成 容器 xff08 Containers xff09 xff1a 各种数据结构 xff0c 如 xff1a vector list deque set map 用来存放数据 从实现的角度来看 xff0c STL容器是
  • private static final long serialVersionUID = 1L 干什么的?

    private static final long serialVersionUID 61 1L xff1b 是定义以一个序列号 java源码里有大量的类都有这么一个序列号 目的就是把java对象序列化而后进行保存 java的序列化机制式通
  • 协议:PELCO-D

    PELCO D的功能是用于矩阵和其它设备之间的通信协议 基本信息 数据格式 xff1a 1位起始位 8位数据 1位停止位 xff0c 无校验位 波特率 xff1a 2400B S 命令格式 字节1 字节2 字节3 字节4 字节5 字节6 字
  • 9年FPGA工作经验,转行了,苦海无涯……

    整理 xff1a 付斌 xff0c 内容来自网络 01 9年峥嵘岁月 我很少说话 xff0c 因为怕被人鄙视 工作了9年的fpga xff0c 总要总结 其实说我的fpga经验 xff0c 也是一坨屎 三年的 xff0c 用altera的c
  • GPS-RTK

    一点一点的补充吧 背景 1 xff0e 各种控制测量传统的大地测量 工程控制测量采用三角网 导线网方法来施测 xff0c 不仅费工费时 xff0c 要求点间RTK 在工程测量的应用通视 xff0c 而且精度分布不均匀 xff0c 且在外业不
  • 浅谈栈帧

    一 什么是栈帧 xff1f 什么是栈帧 xff0c 首先引用百度百科的经典解释 xff1a 栈帧也叫过程活动记录 xff0c 是编译器用来实现过程 函数调用的一种数据结构 实际上 xff0c 可以简单理解为 xff1a 栈帧就是存储在用户栈
  • madVR+potplay 基本设置

    ctrl 43 j 调出 madvr 的OSD菜单 如下图 xff1a 如何设置 madVR 10bit 输出 xff1a 1 确保视频源是10bit 源 2 显示器设置 如下 xff1a 3 渲染设置如下 xff1a 设置完成 xff0c
  • 4.jetson更换python版本

    问题与背景 jetson自带的python版本是3 6 9 xff0c 太老旧了 xff0c 希望更换python版本 尝试替换成python3 7的版本 但是在未替换之前 xff0c 已经装了pip3了 xff0c 是否pip3会与pyt
  • char数组和指针的区别

    一个简单的字符分割函数引发的思考 char SegStr1 const char pSrc int n int nLen 61 strlen pSrc char ptrSrc 256 61 0 char pSeg 61 ptrSrc for
  • 舒尔补理论Schur Compliment

    在做slam的时候经常遇到的一个概念就是schur complement xff0c 了解这个概念 xff0c 对于理解slam的优化过程也会有很大的帮助 xff1b 首先给出的是舒尔补的定义 xff1a 舒尔补的由来其实就是将一个矩阵变成
  • 用CubeSLAM跑自己的数据集

    针对CubeSLAM本博客内容如下 xff0c 主要是阅读论文和代码的一些结果总结 xff0c 还有一部分总结未完成 xff0c 同样使用或者对语义slam感兴趣有经验的欢迎交流 xff0c 该博客后面也会不段更新cubeslam在自己的数
  • mipi接口的摄像头驱动并发布话题

    情况 需要跑ORBSLAM 之前一直使用USB接口的相机 打开摄像头一般使用的是ROS下的usb cam node进行驱动 采集图像并发布成topic的形式 或者使用opencv的videoCapture进行图像的捕捉 因为某些原因需要将u
  • 正确使用StereoRectify

    双目矫正的使用 cv fisheye StereoRectify 函数 主要用于对双目图像做出矫正 计算出用于立体矫正的参数 具体的使用方法如下 void cv fisheye stereoRectify InputArray K1 Inp
  • Eigen问题解决:eigen_assert_exception’ is not a member of ‘Eigen’

    很意外地遇到一个Eigen相关的错误 xff1a usr local include eigen3 Eigen src Core products Parallelizer h 162 40 error eigen assert excep
  • 2020年大学生电子设计竞赛,又来了!

    不知不觉 xff0c 又临近5月份 xff0c 疫情下的各个比赛活动都受到了影响 xff0c 今年是偶数年 xff0c 暑期应该是各个省份的电子设计竞赛比赛之时 还有三四个月 xff0c 有想参加的比赛的同学应该可以提前准备了 关于比赛的帖

随机推荐

  • Kalibr源码学习(一): 重投影误差

    Kalibr源码学习 一 重投影误差 给自己挖一个大坑 从标定结果来学习Kalibr的标定源码 这里基本以KB模型为例 也就是标定时 kalibr的模型设定为 model pinhole equi 这里以重投影误差开始 希望能坚持 重投影误
  • OpenCV入门: Mat数据类型及其转换,访问

    1 总结 先贴上我总结的Opencv的数据类型 主要是针对不同Mat类型进行新建 修改和访问时使用 更详细的数据访问见下文 2 CV 8UC3解说 新建一个CV 8UC3型的cv Mat 其中U代表了unsigned char型的数据 其表
  • Opencv单目标定flag的设定

    1 flag中的标签顺序 xff1a 在代码中的对应如下 xff1a enum CALIB USE INTRINSIC GUESS 61 1 lt lt 0 CALIB RECOMPUTE EXTRINSIC 61 1 lt lt 1 CA
  • 队列的基础知识及实现方法

    队列 在网上又看到关于队列的知识点 xff0c 有很多 xff0c 但都比较琐碎 xff0c 有的还有些错误 xff0c 为方便自己理解 xff0c 特整理出一篇 xff0c 顺便也加强记忆 xff1b 当然 xff0c 也附上我参考的博客
  • sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位

    应该是之前的误操作 导致sudo不能正常的使用 每次输入sudp 都会提醒 sudo xff1a usr bin sudo 必须属于用户 ID 0 的用户 并且设置 setuid 位 这是因为我之前修改了usr的权限 将usr整个文件夹的权
  • VS2015 调试代码时写入位置时发生访问冲突

    前一段时间写一个工程 xff0c 调用自己写的一个库 xff0c 编译成功 xff0c 执行时发生了访问冲突 xff1b 当时觉得很好奇 xff0c 这个库不是第一次调用 xff0c 之前调用过很多次都没有问题 xff0c 偏偏这次出现了访
  • GIT代码管理: git remote add

    这里主要以 如何将一份已经写好的代码提交到两个git远端 为例 xff0c 更好地理解git remote add这句 xff1b 首先要明白一句代码的意思 xff0c 以github最经常的提示为例 xff1a 在这张图面里git ini
  • 强化学习PPO算法的思路流程

    首先可以肯定的是PPO算法是基于actor critic框架的 xff0c 但是它又含有强烈的Policy Gradient的风格 本文仅介绍PPO算法的应用流程 通常PPO算法的实现中有三个network xff0c 一个critic n
  • ubuntu 查看usb设备

    原文地址 xff1a https zhidao baidu com question 1823163553720250108 html 感谢原作者分享 查看 USB 设备 使用的是哪个串口 ls l dev ttyUSB 查看 USB 设备
  • 惯导姿态角的解释和固定的变换公式

    psi tr jk 61 atan2 2 q 2 q 3 43 q 1 q 4 1 2 q 3 q 3 2 q 4 q 4 theta tr jk 61 asin 2 q 1 q 3 q 2 q 4 gamma tr jk 61 atan2
  • 这是我的C语言入门笔记。

    c语言入门 C语言一经出现就以其功能丰富 表达能力强 灵活方便 应用面广等特点迅速在全世界普及和推广 C语言不但执行效率高而且可移植性好 xff0c 可以用来开发应用软件 驱动 操作系统等 C语言也是其它众多高级语言的鼻祖语言 xff0c
  • matlab randn函数产生高斯随机噪声

    randn N 1 就是产生服从方差为1 xff0c 均值为0 xff08 即N 0 1 xff09 的Gaussian分布的NX1随机 噪音矩阵 xff0c 根据Gaussian概率密度函数的特性 xff0c 产生均值为5 xff0c 标
  • socket 发送结构体数据

    Socket中的send函数可以发送字符串 xff0c 但不能直接发送结构体 xff0c 因此在发送端先把结构体转成字符串 xff0c 然后用send发送 xff0c 在接收端recv字符串 xff0c 再转换成原先的结构体 xff0c 这
  • printf()函数详解

    感谢博主的分享 xff1a https me csdn net blog K346K346 1 printf 简介 printf 是C语言标准库函数 xff0c 用于将格式化后的字符串输出到标准输出 标准输出 xff0c 即标准输出文件 x
  • 导航系统中常用坐标系

    转自 xff1a 阿元老师UJN的博客 http blog sina com cn xywatersky 1 地心惯性坐标系 xff08 简称i系 xff09 OXiYiZi xff1a 原点在地球中心 xff0c 它不参与地球自转 xff
  • mavlink模块中接收offboard模式下的mavlink消息流

  • 本地SVN服务器的搭建(WINDOWS环境)

    1 下载安装 VISUALSVN SERVER 1 1下载地址 xff1a https www visualsvn com server download 1 2下载完成后 xff0c 双击安装 2 下载安装 TortoiseSVN 1 1
  • 微信第三方平台全网发布流程

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net weixin 35829542 art
  • 百度短地址 API接口 985.so 是一个免费且好用的短地址

    文档URL http help baidu com question prod en 61 webmaster amp class 61 CD F8 D2 B3 CB D1 CB F7 CC D8 C9 AB B9 A6 C4 DC amp
  • Python图形GUI工具包tkinter如何调整元件在窗口中的位置几何布局管理

    Tkinter中的GUI总是有一个root窗口 不管你是主动或者别动获得 主窗口就是你的程序开始运行的时候创建的 在主窗口中你通常是放置了你主要的部件 另外 Tkinter脚本可以依据需要创建很多独立的窗口 主要的方法就是通过创建Tople