zoukankan      html  css  js  c++  java
  • Tkinter 组件

    1.什么是Tkinter?

    Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。

    由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。

    导入

    import tkinter

    注意:Python3.x 版本使用的库名为 tkinter,即首写字母 T 为小写。

    2.创建一个GUI程序

    • 1、导入 Tkinter 模块
    • 2、创建控件
    • 3、指定这个控件的 master, 即这个控件属于哪一个
    • 4、告诉 GM(geometry manager) 有一个控件产生了。
    #!/usr/bin/python3
     
    import tkinter
    top = tkinter.Tk()
    # 进入消息循环
    top.mainloop()

    2.1向窗口中添加组件

    前面创建的窗口只是一个容器,在这个容器中还可以添加其他元素。在Python程序中,使用Tkinter创建窗口后,可以向窗口中添加组件元素。

    组件与窗口一样,也是通过Tkinter模块中相应的组件函数生成的。在生成组件以后,就可以使用pack、grid或place等方法将它添加到窗口中。实例文件zu.py演示了使用Tkinter向窗体中添加组件的过程。

    import tkinter #导入Tkinter模块
    root = tkinter.Tk()#生成一个主窗口对象
    #实例化标签组件
    label= tkinter.Label(root, text="Python, tkinter!")
    label.pack()#将标签添加到窗口中
    button1 = tkinter.Button(root, text="按钮1")#创建按钮1
    button1.pack(side=tkinter.LEFT)#将按钮1添加到窗口中
    button2 = tkinter.Button(root, text="按钮2")#创建按钮2
    button2.pack(side=tkinter.RIGHT)#将按钮2添加到窗口中
    root.mainloop()#进入消息循环

    在上述实例代码中,分别实例化了Tkinter模块中的一个标签组件和两个按钮组件,然后调用pack()方法将这3个组件添加到主窗口中。执行文件zu.py后的效果如图所示。

     

    3.Tkinter 组件

    Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。

    目前有15种Tkinter的部件。我们提出这些部件以及一个简短的介绍,在下面的表:

    控件描述
    Button 按钮控件;在程序中显示按钮。
    Canvas 画布控件;显示图形元素如线条或文本
    Checkbutton 多选框控件;用于在程序中提供多项选择框
    Entry 输入控件;用于显示简单的文本内容
    Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器
    Label 标签控件;可以显示文本和位图
    Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
    Menubutton 菜单按钮控件,用于显示菜单项。
    Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单
    Message 消息控件;用来显示多行文本,与label比较类似
    Radiobutton 单选按钮控件;显示一个单选的按钮状态
    Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间
    Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。.
    Text 文本控件;用于显示多行文本
    Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似
    Spinbox 输入控件;与Entry类似,但是可以指定输入范围值
    PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
    LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。
    tkMessageBox 用于显示你应用程序的消息框。

    3.2 加强版模块tkinter.ttk中新增的Widget:

    • Combobox;
    • Notebook;
    • Progressbat;
    • Separator;
    • Sizegrip;
    • Treeview。

    3.3 Widget的共同方法:

    1. Configuration
      • config(option=value):Widget属性可以在建立时设置,也可以在程序执行时使用config()重新设置;
      • cget("option"):取得option参数值;
      • keys():可以用此方法获得所有该Widget的参数。
    2. Event Processing
      • mainloop():让程序继续执行,同时进入等待与处理窗口事件;
      • quit():Python Shell窗口结束,但是所建立的窗口继续执行;
      • update():更新窗口画面。
    3. Event callbacks
      • bind(event,callback):事件绑定;
      • unbind(event):接触绑定。
    4. Alarm handlers
      • after(time,callback):间隔指定时间后调用callback()方法。

    3.4 标准属性

    标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。

    属性 描述
    Dimension 控件大小;
    Color 控件颜色;
    Font 控件字体;
    Anchor 锚点;
    Relief 控件样式;
    Bitmap 位图;
    Cursor 光标;

    4. 几何管理

    Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包、网格、位置

    几何方法 描述
    pack() 包装;
    grid() 网格;
    place() 位置;

    3.5 组件部分共同方法

    1. keys()

    Widget的共同方法。

    可以以列表的形式传回Widget的所有参数。

    root = Tk()
    root.title("Ex")
    label = Label(root, text = "tkinter")
    label.pack()
    print(label.keys())

    ['activebackground', 'activeforeground', 'anchor', 'background', 'bd', 'bg', 'bitmap', 'borderwidth', 'compound', 'cursor', 'disabledforeground', 'fg', 'font', 'foreground', 'height', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'image', 'justify', 'padx', 'pady', 'relief', 'state', 'takefocus', 'text', 'textvariable', 'underline', 'width', 'wraplength']

    2. config()

    Widget的共同方法。

    Widget控件在建立时可以直接设置对象属性,若是部分属性未建立,未来在程序执行时可以使用config()方法建立或更改属性。此方法内属性设置的参数用法与建立时相同。

    计数器:

    from tkinter import *
    
    counter = 0
    def run_counter(digit):
        def counting():
            global counter
            counter += 1
            digit.config(text=str(counter))
            digit.after(1000,counting)
        counting()
    
    root = Tk()
    root.title("Ex")
    
    digit = Label(root, bg = "yellow", 
                  height = 3, width = 10, 
                  font = "Helvetic 20 bold")
    digit.pack()
    run_counter(digit)
    root.mainloop()

    未标题1

    3. Separator

    用于添加分隔线。

    Separator(父对象,options)

    options为HORIZONTAL表示建立水平分隔线,VERTICAL表示建立垂直分隔线。

    from tkinter import *
    from tkinter.ttk import Separator
    root = Tk()
    root.title("Ex")
    
    myTitle = "我喜欢Tkinter"
    myContent = """今天,我开始学习Tkinter。
    Tkinter 是 Python 的标准 GUI 库,
    Python 使用 Tkinter 可以快速的创建 GUI 应用程序。"""
    label1 = Label(root, text = myTitle, font = "Helvetic 20 bold")
    label1.pack(padx = 10, pady = 10)
    sep = Separator(root, orient = HORIZONTAL)
    sep.pack(fill = X, padx = 5)
    label2 = Label(root, text = myContent)
    label2.pack(padx = 10, pady = 10)
    root.mainloop()

    image

    3.6组件属性(部分)

    1. Color、Dimensions

    Widget的共同属性。

    bg、fg设置背景、前景色。

    width、height的单位是字符。

    root = Tk()
    root.title("Ex")
    root.geometry("200x80")
    label = Label(root, text = "I like tkinter", 
                  bg = "#EF72AA", fg = "white", 
                  height = 3, width = 20)
    label.pack() #包装与定位组件
    root.mainloop()
     

    image

    2 Anchor

    Widget的共同属性。

    Anchor是指标签文字在标签区域的输出位置。

    image

    比如nw效果如下:

    image

    anchor的参数设置也可以使用NW、N、NE、W等大写常数,同时省略字符串的双引号。

    3 Wraplength

    wraplength = 35

    效果如下:

    image

    4 Font

    Widget的共同属性。

    用于设置文字字形。

    1. family:字形,如Helvetica、Times等;
    2. size:字号,单位是像素;
    3. weight:如bold、normal;
    4. slant:如italic、roman;
    5. underline:True、False;
    6. overstrike:True、False。
    root = Tk()
    root.title("Ex")
    label = Label(root, text = "I like tkinter", 
                  bg = "#EF72AA", fg = "white", 
                  height = 3, width = 20, 
                  font = "Helnetic 20 bold italic")
    #             font = ("Helnetic", 20, "bold", "italic"))
    label.pack() #包装与定位组件
    root.mainloop()

    image

    height和width都是字号联动的。

    5 Justify

    justify = "right"

    image

    6 Bitmaps

    Widget的共同属性。

    在标签位置放置内建位图。

    image

    error、hourglass、info、questhead、question、warning、gray12、gray25、gray50、gray75

    label = Label(root, bitmap = "question")

    image

    7 Compound

    图像与文字共存时,使用此参数定义文字与图像的位置关系。

    • left:图像在左;
    • right:图像在右;
    • top:图像在上;
    • bottom:图像在下;
    • center:文字覆盖在图像上方。

    label = Label(root, bitmap = "question", text = "Question",
                   compound = "left")

    image

    8 Relief

    Widget的共同属性。

    用于建立Widget的边框。

    image

    label = Label(root, text = "raised",
                   relief = "raised")

    image

    9 Padx/Pady

    padx用于设置标签文字左右边界与标签区间的x轴间距,pady用于设置文字上下边界与标签取件单y轴间距。

    与width和height作用相似,可以互相替代。

    root.geometry("300x100")
    label = Label(root, text = "raised",
                   bg = "lightyellow", relief = "raised",
                   padx = 5, pady = 10)

    image

    10 Image

    图片可以应用在许多地方,例如标签、功能按钮、选项按钮文字区域等。在使用前可以使用PhotoImage()方法建立图像对象,然后再将此对象应用在其他窗口组件上。

    imageobj = PhotoImage(file = "xxx.gif")

    png也可。

    image_obj = PhotoImage(file = "mystar.png")
    label = Label(root, image = image_obj)

    image

    jpg无法直接解析:

    image

    需要借助PIL模块。

    from tkinter import *
    from PIL import Image, ImageTk
    root = Tk()
    root.title("Ex")
    image_obj = Image.open("scenery.jpg")
    jpg_obj = ImageTk.PhotoImage(image_obj)
    label = Label(root, image = jpg_obj)
    label.pack() #包装与定位组件
    root.mainloop()

    image

    注意:bitmap和image不能共存。

    11 Cursors

    Widget的共同属性。

    表示光标形状,实际形状可能会因操作系统不同而有所差异。

    image

    参考:https://blog.csdn.net/qq_41556318/article/details/85079411

    https://blog.csdn.net/qq_42778168/article/details/97137618

    https://blog.csdn.net/qq_41556318/category_9283243.html

    https://www.cnblogs.com/pywjh/p/9527828.html#cykj

    https://www.cnblogs.com/dingdangsunny/p/12629393.html#_label2_12   (这个蛮好的)

  • 相关阅读:
    JavaWeb---总结(七)HttpServletResponse对象(一)
    JavaWeb---总结(八)HttpServletResponse对象(二)
    JavaWeb---总结(九)通过Servlet生成验证码图片
    hdu 1102(最小生成树)
    poj 2002(好题 链式hash+已知正方形两点求另外两点)
    hdu 2461(AC) & poj 3695(TLE)(离散化+矩形并)
    poj 1389(离散化+计算几何)
    poj 1151(离散化+矩形面积并)
    hdu 3264(枚举+二分+圆的公共面积)
    poj 2546(两圆公共面积)
  • 原文地址:https://www.cnblogs.com/yunlong-study/p/14452066.html
Copyright © 2011-2022 走看看