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   (这个蛮好的)

  • 相关阅读:
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
    云原生时代,2个方案轻松加速百万级镜像
    Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
  • 原文地址:https://www.cnblogs.com/yunlong-study/p/14452066.html
Copyright © 2011-2022 走看看