zoukankan      html  css  js  c++  java
  • Python的标准GUI:Tkinter的组件

    Label组件:
    Label组件用于显示文本和图像,并且使用双重缓冲
    用法:
    使用Label组件可以指定想要显示的内容(文本、位图或者图片):
    from tkinter import *  
      
    master = Tk()  
    w = Label(master, text="Hello FishC!")  
    w.pack()   //用于自动调节尺寸  
    mainloop() //主事件循环 
    还可以通过foreground(fg)和background(bg)来设置Label的前景色和背景色
    Label可以显示多行文本,可以直接使用换行文本符或使用wraplength选项来实现,文本换行时,你可以使用 anchor 和 justify 选项来使得
    文本如你所希望的显示出来
     
    可以使用Label显示PhotoImage和BitmapImage对象(务必保留一份图片对象的引用,以防python的垃圾回收机制回收)
    Label(master=None,**options)
    master--父控件
    **options--组件选项
     
     
     
     
    Button控件:
    Button组件用于实现各种各样的按钮
    Button组件常常被用于工具栏、应用程序窗口、和表示接受或拒绝的对话框
    禁用按钮:
    b = Button(master, text="Help", state=DISABLED) 
    Label的尺寸是正好可以容纳其内容,使用padx和pady选项在Button的内容和边框间添加额外的间距
     
    Button 可以显示多行文本,你可以直接使用换行符或使用 wraplength 选项来实现。当文本换行的时候,你可以使用 anchor 和 justify 以及 padx 选项来使得文本如你所希望的显示出来
     
    按钮凹下去:
    将relief选项的默认值RAISED改为SUNKEN  b.config(relief=SUNKEN   )
     
    Button(master=None,**options)
    master--父控件
    **options--组件选项
     
     
     
    方法:
    flash()
    --刷新Button组件,该方法将重绘Button组件若干次
    invoke()
    --调用Button中command选项指定的函数或方法,并返回函数的返回值
    --如果Button的状态是DISABLED(不可用)或没有指定command选项,则该方法无效
     
    Frame控件
    Frame组件是屏幕上的一个矩形区域。Frame主要是作为其他组件的框架基础,或为其他组件提供间距填充
    Frame组件主要用于在复杂的布局中将其他组件分组,也用于填充间距和作为实现高级组件的基类
    Frame(master=None,**options)
    master--父控件
    **options--组件选项
     
     
    Checkbutton组件:
    Checkbutton(多选按钮)用于实现确定是否选择的按钮
    Checkbutton组件被用于作为二选一的按钮
    使用Checkbutton,需要先创建一个Tkinter变量用于存放按钮的状态
     
    默认情况,variable选项设置为1表示选中状态,反之设置为0
    在类中时,最好将variable选项的值作为属性存储
     
    Checkbutton(master=None,**options)
    master--父控件
    **options--组件选项
     
     
     
    方法:
    deselect()
    --取消Checkbutton组件的选中状态,也就是设置variable为offvalue
    select()
    --将Checkbutton组件设置为选中状态,也就是设置variable为onvalue
    flash()
    --刷新Checkbutton组件,该方法将重绘Checkbutton组件若干次
     
     
    Radiobutton组件:
    Radiobutton(单选按钮)组件用于实现多选一的问题。
    Radiobutton组件是用于实现多选一的问题,它几乎总是成组使用,其中所有成员公用相同的变量
     
    Radiobutton 组件跟 Checkbutton 组件非常相似,为了实现其“单选”行为,确保一组中的所有按钮的 variable 选项都使用同一个变量,并使用 value 选项来指定每个按钮代表什么值
    RadioButton(master=None,**options)
    master--父控件
    **options--组件选项
     
     
     
    LabelFrame组件:
    LabelFrame组件是Frame组件的变体,默认情况下,LabelFrame会在其子组件的周围绘制一个边框以及一个标题
    为组件分组,需要先创建一个 LabelFrame,然后像往常一样将子组件添加进去。LabelFrame 组件会自动绘制一个边框将子组件包围起来,并在它们上方显示一个文本标题
    LabelFrame(master=None,**options)
    master--父控件
    **options--组件选项
     
     
    Entry组件:
    Entry组件通常用于获取用户输入的文本
    使用代码为Entry组件添加文本,可以使用insert()方法。如果要替换当前文本,可以先使用delete()方法,再使用insert()方法实现:
     
    获取当前输入框的文本可以使用get()方法
    Entry()(master=None,**options)
    master--父控件
    **options--组件选项
     
     
     
    方法:
    delete(first,last=None)
    --删除参数first到last范围内(包含first和last)的所有内容
    --如果忽略last参数,表示删除first参数指定的选项
    --使用delete(0,END)实现删除输入框的所有内容
    get()
    --获得当前输入框的内容
    icursor(index)
    --将光标移动到index参数指定的位置
    --这同时也会设置INSERT的值
    index(index)
    --返回与index参数相应的选项的序号
    insert(index,text)
    --将text参数的内容插入到index参数指定的位置
    --使用insert(INSERT,text)将text参数指定的字符串插入到光标的指定位置
    --使用insert(END,text)将text参数指定的字符串插入到输入框的末尾
     
    Entry组件是支持验证输入内容的合法性的,比如要求输入数字,你输入字母就是非法。实现该功能需要通过设置validate、validateommand和invalidcommand选项。
     
    invalidcommand选项指定的函数只有在validatecommand的返回值为False的时候才被调用。
     
    Listbox组件:
    Listbox(列表框)组件用于显示一个选择列表。
    当你创建一个Listbox组件时,他是空的,所以要先添加一行或多行文本进去。使用insert()方法添加文本,该方法有两个参数:第一个参数是插入的索引号,第二个参数是插入的字符串。索引号通常是项目的序号(0是列表中第一项的序号)
     
    Listbox组件根据Selectmode选项提供了四种不同的选择模式:SINGLE(单选)、BROWSE(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、MULTIPLE(多选)和EXTENDED(也是多选,但需要同时按住Shift键或Ctrl键或拖拽鼠标实现)。默认是BROWSE
    在某个组件上安装垂直滚动条,需要:
    1. 设置该组件的yscrollbarcommand选项为Scrollbar组件的set()方法;
    2. 设置Scrollbar组件的command选项为该组件的yview()方法
     
    List(master=None,**options)
    master--父控件
    **options--组件选项
     
    Scrollbar组件:
    Scrollbar(滚动条)组件用于滚动一些组件的可见范围,根据方向可分为垂直滚动条和水平滚动条
    为了在某个组件上安装垂直滚动条,你需要做两件事:
    1. 设置该组件的 yscrollbarcommand 选项为 Scrollbar 组件的 set() 方法
    2. 设置 Scrollbar 组件的 command 选项为该组件的 yview() 方法。
     
    当Listbox组件的可视范围发生改变时,Listbox组件通过调用set()方法通知Srollbar组件。(当用户操作滚动条时自动调用Listbox组件的yview()方法)
    Scrollbar (master=None,**options)
    master--父控件
    **options--组件选项
     
    Scale组件:
    Scale(刻度)组件看起来像一个带数据的Scrollbar组件。Scale组件允许通过滑动滑块来选择一个范围的数字
    创建一个指定范围的Scale组件需要制定它的from和to两个选项
    可以通过resolution选项控制分频率(步长),通过tickinterval选项设置刻度
     
    Scale(master=None,**options)
    master--父控件
    **options--组件选项
     
     
    Text()组件:
    Text()组件用于显示和处理多行文本。因为适用于显示纯文本或格式化文本(不同字体,嵌入图片,显示链接,甚至带CSS格式的HTML)常被用于作为简单的文本编辑器和网页浏览器
     
    创建一个Text组件的时候,里面没有内容,用insert()方法以及INSERT或END索引号插入内容     
    在Text组件中插入对象,可以使用windows_create()和image_create()方法:
    windows_create(index,**options)
    --在index参数指定的位置嵌入一个window对象
    --支持两种方式在Text组件中嵌入window对象:看下方create选项和window选项的描述
    --可选项create:设定一个回调函数用于创建嵌入的window组件,该函数没有参数,并且必须创建Text的子组件并返回
    --可选项window:指定一个已经创建好的window组件,该组件必须是Text组件的子组件
    image_create(index,cnf={},**kw)
    --在index参数指定的位置嵌入一个image对象
    --该image对象必须是Tkinter的PhotoImage或BitmapImage实例
     
    删除Text组件中的内容可以使用delete()方法
    text.delete(1.0,END)
    Text组件还支持“恢复”和“撤销”操作,通过设置undo选项为True可以开启Text组件的“撤销功能”,然后用edit_undo()方法实现“撤销”操作,用edit_redo()方法实现“恢复”操作
    默认情况下每一次完整的操作将会放入栈中(Tkinter中每次焦点切换、用户按下Enter键、删除/插入操作的转换等之前的操作算是一次完整的操作)
     
    Indexs的用法:
    Indexs使用来指向Text组件中文本的位置,跟Python的序列索引一样     
    "line.column"
    将索引位置的行号和列号以字符串的形式表示出来(中间以"."分隔)
    "line.end"
    行号加上字符串".end"的格式表示为该行最后一个字符的位置
    INSERT
    对应光标的位置
    CURRENT
    对应鼠标坐标最近的位置(知道松开鼠标才响应)
    END
    对应Text组件的文本缓冲区的左后一个字符的下一个位置
    expressions
    用于修改任何格式的索引,用字符串的形式实现修改所应的表达式
     
    Marks用法
    Marks通常是嵌入到Text组件文本中不可见对象。
     
    可以使用tag_config()方法设置Tags样式
    如果对同一个范围的文本加上多个Tags,并且设置相同的选项,那么新创建爱你的Tag样式会覆盖比较旧的Tag
    也可以使用tag_raise()tag_lower()方法来控制Tags间的优先级
     
    此外Tags还支持事件绑定,使用的是tag_bind()的方法
    Text(master=None,**options)
    master--父控件
    **options--组件选项
     
     
     
    方法:
    dump(index1,index2=None,command=None,**kw)
    --返回index1和index2之间的内容
    --返回的值是一个由3元祖(关键词,值,索引)组成的列表,关键词参数的顺序为:all,image,mark,tag,text,window
    --默认关键词是'all',表示全部关键词均为选中状态
    --如果需要筛选个别关键词,可以用dump(index1,index2,image=True,text=True)这样的形式调用
    --如果指定了command函数,那么会为列表中的每一个三元组作为参数调用一次该函数
     
    Canvas组件:
    Canvas是一个通用的组件,通常用于显示和编辑图形。可以用来绘制线段、圆形、多边形,甚至是绘制其他组件
    用法:
    在Canvas组件上绘制对象,可以用create_xxx()的方法(XXX表示对象类型,例如线段line,矩形rectangle,文本text等)
     
    注意,添加到Canvas上的对象会一直保留着。如果想要更改可以使用coords(),itemconfig()和move()方法来移动画布上的对象或者直接用delete()方法来删除     
    还可以在Canvas上显示文本,使用的是create_text()方法:
    使用create_oval()方法绘制椭圆形(或圆形),参数是制定一个限定矩形(Tkinter会自动在这个矩形内绘制一个椭圆)
    绘制多边形,可以使用create_polygon()方法
     
    Canvas组件支持对象
    • arc(弧形、弦或扇形)
    • bitmap(内建的位图文件或XBM格式的文件)
    • image(BitmaoImage或PhotoImage的实例对象)
    • line(线)
    • oval(椭圆形)
    • polygon(多边形)
    • rectangle(矩形)
    其中弦、扇形、椭圆形、圆形和矩形这些封闭式图形都是有轮廓线和填充颜色组成的,但都可以设置为透明
    画布对象显示的顺序
    默认情况下新建的画布对象会覆盖旧的画布对象的重叠部分
    指定画布对象
    Canvas组件提供了集中方法让你指定画布对象
    • Item handles
    • Tags
    • ALL
    • CURRENT
    Item handles事实上是一个用于指定某个画布对象的整形数字
    Tags是负载画布对象上的标签。一个画布对象与多个Tags相关联(Canvas预定义了两个Tags:ALL和CURRENT)
    ALL表示Canvas组件中的所有画布对象
    CURRENT表示鼠标下的画布对象
     
    方法:
    create_arc(bbox,**options)
    --根据bbox(x1,y1,x2,y2)创建一个扇形、弓形或弧形
    --新创建的画布对象位于显示列表的顶端
    --创建成功后返回该画布对象的ID
    --下方表格列举了各个options选项的具体含义
     
     
    Menu组件:
    Menu组件用于实现顶级菜单、下拉菜单和弹出菜单
    用法:
    创建一个顶级菜单、你需要先创建一个菜单实例,然后使用add()方法将命令和其他子菜单添加进去:
    创建一个下拉菜单方法也一样,但不同的是最后需要添加到主菜单上(而不是窗口上)
     
    Menu(master,**options)
    master--父控件
    **options--组件选项
    方法:
    add(type,**options)
    --type参数指定添加菜单类型,可以是:"command","cascade","checkbutton","radiobutton"或"separator"
    --还可以通过options选项设置菜单的属性,下表列举了options可以使用的选项和具体含义
    add_cascade(**options )
    --添加一个父菜单
    add_command(**options)
    --添加一个普通的命令菜单项
    add_checkbutton(**options)
    --添加一个多选按钮的菜单项
    add_separator(**options)
    --添加一条分割线
     
    MenuButton组件:
    MenuButton组件是一个与Menu组件相关联的按钮,它可以放在窗口中的任意位置,并且在被按下时弹出下拉菜单
    用法:
    创建一个Menubutton组件,并创建一个Menu组件与之相关联
     
    OptionMenu(选择菜单)事实上是下拉菜单的改版
    获得用户选择的内容,使用Tkinter变量的get()方法即可
    将多个选项加到选择菜单中,现将选项写入一个元祖中,然后将这个元祖传进去
    星号作为形参的时候是起到"打包的作用",相反,作为实参的时候是起到"解包"的作用
     
     
    通过在形参前加一个星号(*)或两个星号(**)来指定函数可以接受任意数量的实参
    • 当参数形如(*args)时,传递给参数的任意个实参会按位置打包成一个元祖(tuple)
    • 当参数形如(**args)时,传递给函数的任意个key = value实参会被包装进一个字典(dict)
    星号(*)作为实参时,表示通过解包参数调用函数:
    有打包就打包,通过在实参前加一个星号(*)或两个星号(**)来对列表(list)、元祖(tuple)或字典(dict)进行解包
     
    事件绑定Event and Bindings:
    Tkinter提供一个强大的机制可以让你自由地处理时间,对于每个组件可以通过bind()方法将函数或方法绑定到具体的事件上
    widget.bind(event, handler)
    当被触发的事件满足该组件你绑定的事件时,Tkinter就会带着时间对象(Event)去调用handler()方法
     
    只有当组件获得焦点的时候才能接受键盘时间(Key),用focus_set()获得焦点
    <Motion>事件捕获鼠标在组件上的运动轨迹
    事件序列:
    Tkinter使用一种称为事件序列的机制来允许用户定义事件,用户需要使用bind()方法将具体的时间序列与自定义的方法相绑定。时间序列是以字符串的形式表示的,可以表示一个或多个相关联的事件
    语法:
    <modifier-typr-detail>
    • 事件序列是包含在尖括号(<...>)中
    • type部分的内容是最重要的,它通常用于描述普通的事件类型,例如鼠标点击或键盘按键点击
    • modifier部分的内容是可选的,它通常用于描述组合键,例如Ctrl+ c,Shift + 鼠标左键点击
    • detail部分的内容是可选的,它通常用于描述具体的按键,例如Button-1表示鼠标左键
    type:
     
     
    ButtonRelease 比 Button 好用,怕用户误点鼠标
    KeyPress 可简写为Key
    modifier:
     
    Event对象
    当Tkinter去回调你定义的函数的时候,都会带着Event对象(作为参数)去调用
     
     
    Message组件
    Message组件是Label组件变体,用于显示多汗文本消息。Message组件能够自动换行,并调整文本的尺寸使其适应给定的尺寸
     
     
    Spinbox组件:
    Spinbox组件是Entry组件的变体,用于从一些固定的值中选取一个
    和Entry组件的区别是使用Spinbox组件可以用过范围或者元组指定允许用户输入的内容
     
    PanedWindow组件
    PanedWindow组件是一个控件管理组件。跟Frame组件累次,都是为组件提供一个框架
    当需要提供一个可供用户调整的多空间框架的时候,可以使用PanedWindow组件。PanedWindow组件会为每一个子组件生成一个独立地窗格,用户可以自由调整窗格的大小
     
    窗格设置分割线使用sashrelief
     
    TopLevel组件:
    Toplevel组件通常用在显示额外的窗口、对话框和其他弹出窗口上
     
    pack、grid和place均用于管理同在一个父组件下的所有组件的布局,其中:
    • pack是按添加顺序排列组件
    • grid是按行/列形式排列组件
    • place则允许程序员指定组件的大小和位置
    对比grid管理器,pack更适用于少量组件的排列,但它在使用上更加简单(.pack())。如果需要创建相对复杂的布局结构,那么建议是使用多个框架结构构成,或者使用grid管理器实现
     
  • 相关阅读:
    java_十进制数转换为二进制,八进制,十六进制数的算法
    vim常用命令 vim键盘布局
    百度HTTPS加密搜索有什么用?
    delete
    hadoop2的automatic HA+Federation+Yarn配置的教程
    MinGW GCC下sleep()函数问题
    delete
    8天学通MongoDB——第一天 基础入门
    8天学通MongoDB——第六天 分片技术
    8天学通MongoDB——第五天 主从复制
  • 原文地址:https://www.cnblogs.com/navysummer/p/9149417.html
Copyright © 2011-2022 走看看