精华内容
下载资源
问答
  • tkinter组件详解
    千次阅读
    2021-09-13 13:54:03

    Entry、Text :delete/insert    

    Entry.set   Entry.get()

    label1['text']

    Tkinter.END

    config

    textvariable

    intvar() stringvar()

    1、intvar():属于Tkinter下的对象。用于处理整型。

    2、stringvar():StringVar并不是python内建的对象,而是属于Tkinter下的对象。

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

     Tkinter 组件详解(一):Label

    Label 可以显示 Tkinter 变量的内容。言下之意就是当变量的内容发生改变时,Label 中显示的内容也会自动更新:

    1. v = tk.StringVar()

    2. w = tk.Label(master, textvariable=v)

    3. v.set("~新的文本~")

    4. w.pack()

     

    更多相关内容
  • 主要介绍了python tkinter组件使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Tkinter 组件详解(十一):Text

    万次阅读 多人点赞 2018-12-25 16:26:08
    Tkinter 的所有组件中,Text 组件显得异常强大和灵活,适用于多种任务。虽然该组件的主要目的是显示多行文本,但它常常也被用于作为简单的文本编辑器和网页浏览器使用。 何时使用 Text 组件? Text 组件用于...

    Text(文本)组件用于显示和处理多行文本。在 Tkinter 的所有组件中,Text 组件显得异常强大和灵活,适用于多种任务。虽然该组件的主要目的是显示多行文本,但它常常也被用于作为简单的文本编辑器和网页浏览器使用。

    何时使用 Text 组件?

    Text 组件用于显示文本文档,包含纯文本或格式化文本(使用不同字体,嵌入图片,显示链接,甚至是带 CSS 格式的 HTML 等)。因此,它常常也被用于作为简单的文本编辑器和网页浏览器使用。

    用法

    当你创建一个 Text 组件的时候,它里边是没有内容的。为了给其插入内容,你可以使用 insert() 方法以及 "insert" 或 "end" 索引号:

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root)
    text.pack()
    
    # "insert" 索引表示插入光标当前的位置
    text.insert("insert", "I love ")
    text.insert("end", "Python.com!")
    
    root.mainloop()

    值得一提的是,Text 组件的 insert() 方法有一个可选的参数,用于指定一个或多个“标签”(标签用于设置文本的格式,请参考下方【Tags 用法】)到新插入的文本中:

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=20, height=5)
    text.pack()
    
    # 设置 tag
    text.tag_config("tag_1", backgroun="yellow", foreground="red")
    
    # "insert" 索引表示插入光标当前的位置
    text.insert("insert", "I love ")
    text.insert("end", "FishC.com!", "tag_1")
    
    root.mainloop()

    在 Text 组件中插入对象,可以使用 window_create() 和 image_create() 方法:

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=20, height=5)
    text.pack()
    
    text.insert("insert", "I love Python!")
    
    def show():
        print("哎呀,我被点了一下~")
        
    b1 = tk.Button(text, text="点我点我", command=show)
    text.window_create("insert", window=b1)
    
    root.mainloop()
        
    

    删除 Text 组件中的内容可以用 delete() 方法,下边代码用于删除所有内容(也包含 window 和 image 对象,但不会删除 marks 的内容):

    text.delete(1.0, "end")

    删除单独一个字符(或者一个 window 对象,或者一个 image 对象),你可以仅使用一个参数:

    text.delete(b1)

    将 state 选项从默认的 "normal" 修改为 "disabled",使得 Text 组件中的内容为“只读”形式。不过需要注意的是,当你需要进行任何修改的时候,记得将 state 选项改回 "normal",否则 insert() 和 delete() 方法都会失效。

    获得 Text 组件的内容,可以使用 get() 方法(仅获取文本内容):

    contents = text.get(1.0, "end")

    在下边例子中,通过校检 Text 组件中文本的 MD5 摘要来判断内容是否发生改变:

    import tkinter as tk
    import hashlib
    
    root = tk.Tk()
    
    text = tk.Text(root, width=20, height=5)
    text.pack()
    
    text.insert("insert", "I love Python.com!")
    contents = text.get(1.0, "end")
    
    def getSig(contents):
        m = hashlib.md5(contents.encode())
        return m.digest()
    
    sig = getSig(contents)
    
    def check():
        contents = text.get(1.0, "end")
        if sig != getSig(contents):
            print("警报:内容发生变动!")
        else:
            print("风平浪静~")
    
    tk.Button(root, text="检查", command=check).pack()
    
    root.mainloop()

               

    index() 方法用于将所有支持的“索引”格式(请参考下方【Indexes 用法】)转换为“行.列”格式的索引号:

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=20, height=5)
    text.pack()
    
    print(text.index("insert"))
    text.insert("insert", "You are good!")
    print(text.index("insert"))
    
    root.mainloop()

    如果你需要跟踪一个位置,那么你可以将该位置“标记”下来(请参考下方【Marks 用法】):

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=20, height=5)
    text.pack()
    
    text.insert("insert", "You are good!")
    text.mark_set("here", '1.8')
    text.insert("here", "very ")
    
    root.mainloop()

    最后,使用 search() 方法可以搜索 Text 组件中的内容。你可以提供一个确切的目标进行搜索(默认),也可以使用 Tcl 格式的正则表达式进行搜索(需设置 regexp 选项为 True):

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=20, height=5)
    text.pack()
    
    text.insert("insert", "I love Python.com!")
    
    # 将任何格式的索引号统一为元组 (行,列) 的格式输出
    def getIndex(text, index):
        return tuple(map(int, str.split(text.index(index), ".")))
    
    start = 1.0
    while True:
        pos = text.search("o", start, stopindex="end")
        if not pos:
            break
        print("找到啦,位置是:", getIndex(text, pos))
        start = pos + "+1c"  # 将 start 指向下一个字符
    
    
    root.mainloop()

    如果忽略 stopindex 选项,表示直到文本的末尾结束搜索。设置 backwards 选项为 True,则是修改搜索的方向(变为向后搜索,那么 start 变量你应该设置为 END,stopindex 选项设置为 1.0,最后 "+1c" 改为 "-1c")

    “恢复”和“撤销”操作

    Text 组件还支持“恢复”和“撤销”操作,这使得 Text 组件显得相当高大上。

    通过设置 undo 选项为 True 可以开启 Text 组件的“撤销”功能。然后用 edit_undo() 方法实现“撤销”操作,用 edit_redo() 方法实现“恢复”操作。

    这是因为 Text 组件内部有一个栈专门用于记录内容的每次变动,所以每次“撤销”操作就是一次弹栈操作,“恢复”就是再次压栈。

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=40, height=5, undo = True)
    text.pack()
    
    
    def move():
        text.edit_undo()
    
    tk.Button(root, text = "撤销", command = move).pack()
    
    root.mainloop()

    大概就是下图这么回事

    默认情况下,每一次完整的操作将会放入栈中。但怎么样算是一次完整的操作呢?Tkinter 觉得每次焦点切换、用户按下 Enter 键、删除\插入操作的转换等之前的操作算是一次完整的操作。也就是说你连续输入“I love PythonP”的话,一次的“撤销”操作就会将所有的内容删除。

    那我们能不能自定义呢?比如我希望插入一个字符就算一次完整的操作,然后每次点击“撤销”就去掉一个字符。

    当然可以!做法就是先将 autoseparators 选项设置为 False(因为这个选项是让 Tkinter 在认为一次完整的操作结束后自动插入“分隔符”),然后绑定键盘事件,每次有输入就用 edit_separator() 方法人为地插入一个“分隔符”:

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=40, height=5, autoseparators=False, undo=True, maxundo=10)
    text.pack()
    
    def callback(event):
        text.edit_separator()
    
    text.bind('<Key>', callback)
    
    text.insert("insert", "I love Python!")
    
    
    def move():
        text.edit_undo()
    
    tk.Button(root, text = "撤销", command = move).pack()
    
    root.mainloop()
    

    Indexes 用法

    Indexes(索引)是用来指向 Text 组件中文本的位置,跟 Python 的序列索引一样,Text 组件索引也是对应实际字符之间的位置。

    Tkinter 提供一系列不同的索引类型:

    • "line.column"(行/列)
    • "line.end"(某一行的末尾)
    • "insert"
    • "current"
    • "end"
    • user-defined marks
    • user-defined tags("tag.first","tag.last")
    • selection(SEL_FIRST,SEL_LAST)
    • window coordinate("@x,y")
    • embedded object name(window,images)
    • expressions

    下边我们逐个给大家讲解:

    "line.column"

    行/列 是最基础的索引方式,它们将索引位置的行号和列号以字符串的形式表示出来(中间以 "." 分隔,例如 "1.0")。需要注意的是,行号以 1 开始,列号则以 0 开始。你还可以使用以下语法构建索引:

    "%d.%d" % (line, column)

    指定超出现有文本的最后一行的行号,或超出一行中列数的列号都不会引发错误。对于这样的指定,Tkinter 解释为已有内容的末尾的下一个位置。

    需要注意的是,使用 行/列 的索引方式看起来像是浮点值。其实不只像而已,你在需要指定索引的时候使用浮点值代替也是可以的:

     
    import tkinter as tk
     
    root = tk.Tk()
     
    text = tk.Text(root, width = 30, heigh = 3)
    text.pack()
     
    text.insert("insert", "I love Python")
    print(text.get("1.2", 1.6))
     
    root.mainloop()
    

    使用 index() 方法可以将所有支持的“索引”格式转换为“行/列”格式的索引号。

    "line.end"

    行号加上字符串 ".end" 的格式表示为该行最后一个字符的位置:

    text.insert("insert", "I love Python")
    print(text.get("1.2", "1.end"))
    
    >>>
    love Python
    

     "insert"

    对应插入光标的位置。

    "current"

    对应与鼠标坐标最接近的位置。不过,如果你紧按鼠标任何一个按钮,它会直到你松开它才响应。

    "end"

    对应 Text 组件的文本缓冲区最后一个字符的下一个位置。

    user-defined marks

    user-defined marks 是对 Text 组件中位置的命名。"insert" 和 "current" 是两个预先命名好的 marks,除此之外你可以自定义 marks(请参考下方【Marks 用法】)。

    User-defined tags

    User-defined tags 代表可以分配给 Text 组件的特殊事件绑定和风格(请参考下方【Tags 用法】)。

    你可以使用 "tag.first"(使用 tag 的文本的第一个字符之前)和 "tag.last"(使用 tag 的文本的最后一个字符之后)语法表示标签的范围。

    "%s.first" % tagname
    "%s.last" % tagname

    如果查无此 tag,那么 Tkinter 会抛出一个TclError 异常。

    selection(SEL_FIRST,SEL_LAST)

    selection 是一个名为 SEL(或 "sel")的特殊 tag,表示当前被选中的范围,你可以使用  SEL_FIRST 到 SEL_LAST 来表示这个范围。如果没有选中的内容,那么 Tkinter 会抛出一个TclError 异常。

    window coordinate("@x,y")

    你还可以使用窗口坐标作为索引。例如在一个事件绑定中,你可以使用以下代码找到最接近鼠标位置的字符:

    "@%d,%d" % (event.x, event.y)

    embedded object name(window,images)

    embedded object name 用于指向在 Text 组件中嵌入的 window 和 image 对象。要引用一个 window,只要简单地将一个 Tkinter 组件实例作为索引即可。引用一个嵌入的 image,只需使用相应的 PhotoImage 和 BitmapImage 对象。

    expressions

    expressions 用于修改任何格式的索引,用字符串的形式实现修改索引的表达式。

    具体表达式实现如下:

    表达式

    含义

    "+ count chars"1. 将索引向前(->)移动 count 个字符
    2. 可以越过换行符,但不能超过 END 的位置
    "- count chars"1. 将索引向后(<-)移动 count 个字符
    2. 可以越过换行符,但不能超过 "1.0" 的位置
    "+ count lines"1. 将索引向前(->)移动 count 行
    2. 索引会尽量保持与移动前在同一列上,但如果移动后的那一行字符太少,将移动到该行的末尾
    "- count lines"1. 将索引向后(<-)移动 count 行
    2. 索引会尽量保持与移动前在同一列上,但如果移动后的那一行字符太少,将移动到该行的末尾
    " linestart"1. 将索引移动到当前索引所在行的起始位置
    2. 注意,使用该表达式前边必须有一个空格隔开
    " lineend"1. 将索引移动到当前索引所在行的末尾
    2. 注意,使用该表达式前边必须有一个空格隔开
    " wordstart"1. 将索引移动到当前索引指向的单词的开头
    2. 单词的定义是一系列字母、数字、下划线或任何非空白字符的组合
    3. 注意,使用该表达式前边必须有一个空格隔开
    " wordend"1. 将索引移动到当前索引指向的单词的末尾
    2. 单词的定义是一系列字母、数字、下划线或任何非空白字符的组合
    3. 注意,使用该表达式前边必须有一个空格隔开

    TIPS:只要结果不产生歧义,关键字可以被缩写,空格也可以省略。例如:"+ 5 chars" 可以简写成 "+5c"

    在实现中,为了确保表达式为普通字符串,你可以使用 str 或格式化操作来创建一个表达式字符串。下边例子演示了如何删除插入光标前边的一个字符:

    def backspace(event):
        event.widget.delete("%s-1c" %"insert" , "insert")

    Marks 用法

    Marks(标记)通常是嵌入到 Text 组件文本中的不可见对象。事实上 Marks 是指定字符间的位置,并跟随相应的字符一起移动。Marks 有 "insert","current" 和 user-defined marks(用户自定义的 Marks)。其中,"insert" 和 "current" 是 Tkinter 预定义的特殊 Marks,它们不能够被删除。

    "insert" 用于指定当前插入光标的位置,Tkinter 会在该位置绘制一个闪烁的光标(因此并不是所有的 Marks 都不可见)。

     "current" 用于指定与鼠标坐标最接近的位置。不过,如果你紧按鼠标任何一个按钮,它会直到你松开它才响应。

    你还可以自定义任意数量的 Marks,Marks 的名字是由普通字符串组成,可以是除了空白字符外的任何字符(为了避免歧义,你应该起一个有意义的名字)。使用 mark_set() 方法创建和移动 Marks。

    如果你在一个 Mark 标记的位置之前插入或删除文本,那么 Mark 跟着一并移动。删除 Marks 你需要使用 mark_unset() 方法,删除 Mark 周围的文本并不会删除 Mark 本身。

    如果有做相关练习的,应该会被 Mark 的很多特性所疑惑,在准备这个内容的时候也很是迷惑,找了不知多少文档......最后总结为下边几个例子讲解:

    例1,Mark 事实上就是索引,用于表示位置:

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width = 30, heigh = 3)
    text.pack()
    
    text.insert("insert", "I love Python")
    text.mark_set("here", "1.2")
    text.insert("here", "插")
    
    root.mainloop()
    

     

    例2,如果 Mark 前边的内容发生改变,那么 Mark 的位置也会跟着移动(说白了就是 Mark 会“记住”它后边的那货~):

    text.insert("insert", "I love Python")
    text.mark_set("here", "1.2")
    text.insert("here", "插")
    text.insert("here", "入")

    例3,如果 Mark 周围的文本被删除了,Mark 仍然还在噢(只是它后边的那货被删除了,所以它六神无主,只能初始化为 "1.0"): 

    text.insert("insert", "I love Python")
    text.mark_set("here", "1.2")
    text.insert("here", "插")
    
    text.delete("1.0", "end")
    text.insert("here", "入")



    例4,只有 mark_unset() 方法可以解除 Mark 的封印:

    text.insert("insert", "I love Python")
    text.mark_set("here", "1.2")
    text.insert("here", "插")
    
    text.mark_unset("here")
    
    text.delete("1.0", "end")
    text.insert("here", "入")



    看,其实也没有那么难嘛~

    好,讲最后一点,我们看到了,默认插入内容到 Mark,是插入到它的左侧(就是说插入一个字符的话,Mark 向后移动了一个字符的位置)。那能不能插入到 Mark 的右侧呢?其实是可以的,通过 mark_gravity() 方法就可以实现。

    例5(对比例2):

    text.insert("insert", "I love Python")
    
    text.mark_set("here", "1.2")
    text.mark_gravity("here", "left")  #默认是 "right"
    
    text.insert("here", "插")
    text.insert("here", "入")

    Tags 用法

    Tags(标签)通常用于改变 Text 组件中内容的样式和功能。你可以修改文本的字体、尺寸和颜色。另外,Tags 还允许你将文本、嵌入的组件和图片与键盘和鼠标等事件相关联。除了 user-defined tags(用户自定义的 Tags),还有一个预定义的特殊 Tag:SEL。

    SEL(或 "sel")用于表示对应的选中内容(如果有的话)。

    你可以自定义任意数量的 Tags,Tags 的名字是由普通字符串组成,可以是除了空白字符外的任何字符。另外,任何文本内容都支持多个 Tags 描述,任何 Tag 也可以用于描述多个不同的文本内容。

    为指定文本添加 Tags 可以使用 tag_add() 方法:

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=40, height=5)
    text.pack()
    
    text.insert("insert", "I love Python.com!")
    
    text.tag_add("tag1", "1.7", "1.13", "1.15")
    text.tag_config("tag1", background="yellow", foreground="red")
        
    root.mainloop()
    

    如上,使用 tag_config() 方法可以设置 Tags 的样式。下边罗列了 tag_congif() 方法可以使用的选项:

    选项含义
    background1. 指定该 Tag 所描述的内容的背景颜色
    2. 注意:bg 并不是该选项的缩写,在这里 bg 被解释为 bgstipple 选项的缩写
    bgstipple1. 指定一个位图作为背景,并使用 background 选项指定的颜色填充
    2. 只有设置了 background 选项该选项才会生效
    3. 默认的标准位图有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'
    borderwidth1. 指定文本框的宽度
    2. 默认值是 0
    3. 只有设置了 relief 选项该选项才会生效
    4. 注意:该选项不能使用 bd 缩写
    fgstipple1. 指定一个位图作为前景色
    2. 默认的标准位图有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'
    font指定该 Tag 所描述的内容使用的字体
    foreground1. 指定该 Tag 所描述的内容的前景色
    2. 注意:fg 并不是该选项的缩写,在这里 fg 被解释为 fgstipple 选项的缩写
    justify1. 控制文本的对齐方式
    2. 默认是 "left"(左对齐),还可以选择 "right"(右对齐)和 "center"(居中)
    3. 注意:需要将 Tag 指向该行的第一个字符,该选项才能生效
    lmargin11. 设置 Tag 指向的文本块第一行的缩进
    2. 默认值是 0
    3. 注意:需要将 Tag 指向该文本块的第一个字符或整个文本块,该选项才能生效
    lmargin21. 设置 Tag 指向的文本块除了第一行其他行的缩进
    2. 默认值是 0
    3. 注意:需要将 Tag 指向整个文本块,该选项才能生效
    offset

    1. 设置 Tag 指向的文本相对于基线的偏移距离

    2. 可以控制文本相对于基线是升高(正数值)或者降低(负数值)
    3. 默认值是 0
    overstrike1. 在 Tag 指定的文本范围画一条删除线
    2. 默认值是 False
    relief1. 指定 Tag 对应范围的文本的边框样式
    2. 可以使用的值有:"sunken", "raised", "groove", "rifge" 或 "flat"
    3. 默认值是 "flat"(没有边框)
    rmargin1. 设置 Tag 指向的文本块右侧的缩进
    2. 默认值是 0
    spacing11. 设置 Tag 所描述的文本块中每一行与上方的空白间隔
    2. 注意:自动换行不算
    3. 默认值是 0
    spacing21. 设置 Tag 所描述的文本块中自动换行的各行间的空白间隔
    2. 注意:换行符('\n')不算
    3. 默认值是 0
    spacing31. 设置 Tag 所描述的文本块中每一行与下方的空白间隔 
    2. 注意:自动换行不算
    3. 默认值是 0
    tabs1. 定制 Tag 所描述的文本块中 Tab 按键的功能
    2. 默认 Tab 被定义为 8 个字符的宽度
    3. 你还可以定义多个制表位:tabs=('3c', '5c', '12c') 表示前 3 个 Tab 宽度分别为 3厘米,5厘米,12厘米,接着的 Tab 按照最后两个的差值计算,即:19厘米,26厘米,33厘米
    4. 你应该注意到了,它上边 'c' 的含义是“厘米”而不是“字符”,还可以选择的单位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大约是 '1i' 等于 '72p')
    5. 如果是一个整型值,则单位是像素
    underline1. 该选项设置为 True 的话,则 Tag 所描述的范围内文本将被画上下划线
    2. 默认值是 False
    wrap1. 设置当一行文本的长度超过 width 选项设置的宽度时,是否自动换行
    2. 该选项的值可以是:"none"(不自动换行),"char"(默认)(按字符自动换行)和 "word"(按单词自动换行)

    如果你对同一个范围内的文本加上多个 Tags,并且设置相同的选项,那么新创建的 Tag 样式会覆盖比较旧的 Tag:

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=40, height=5)
    text.pack()
    
    
    text.tag_add("tag1", "1.7", "1.13", "1.15")
    text.tag_config("tag1", background="yellow", foreground="red")  # 旧的 Tag
    text.tag_config("tag2", foreground="blue")  # 新的 Tag
    
    # 那么新创建的 Tag2 会覆盖比较旧的 Tag1 的相同选项
    # 注意,与下边的调用顺序没有关系
    text.insert("insert", "I love Python.com!", ("tag2", "tag1"))
        
    root.mainloop()

    你或许想控制 Tags 间的优先级,这可以实现吗?完全没有问题!你可以使用 tag_raise() 和 tag_lower() 方法来提高和降低某个 Tag 的优先级。

    import tkinter as tk
    
    root = tk.Tk()
    
    text = tk.Text(root, width=40, height=5)
    text.pack()
    
    text.tag_config("tag1", background="yellow", foreground="red")
    text.tag_config("tag2", foreground="green")
    
    text.tag_lower("tag2")
    
    text.insert("insert", "I love Python!", ("tag2", "tag1"))
    
    root.mainloop()
    
    
    

    另外 Tags 还支持事件绑定,使用的是 tag_bind() 的方法。

    下边例子中我们将文本("Python.com")与鼠标事件进行绑定,当鼠标进入该文本段的时候,鼠标样式切换为 "arrow" 形态,离开文本段的时候切换回 "xterm" 形态。当触发鼠标“左键点击操作”事件的时候,使用默认浏览器打开Python的首页(https://www.python.org/):

    import tkinter as tk
    import webbrowser
    
    root = tk.Tk()
    
    text = tk.Text(root, width=40, height=5)
    text.pack()
    
    text.insert("insert", "I love Python.com!")
    
    text.tag_add("link", "1.7", "1.17")
    text.tag_config("link", foreground = "blue", underline = True)
    
    def show_arrow_cursor(event):
        text.config(cursor = "arrow")
    
    def show_xterm_cursor(event):
        text.config(cursor = "xterm")
    
    def click(event):
        webbrowser.open("https://www.python.org/")
    
    text.tag_bind("link", "<Enter>", show_arrow_cursor)
    text.tag_bind("link", "<Leave>", show_xterm_cursor)
    text.tag_bind("link", "<Button-1>", click)
    
    root.mainloop()

    参数

    Text(master=None, **options) (class)

    master -- 父组件

    **options -- 组件选项,下方表格详细列举了各个选项的具体含义和用法:

    选项含义
    autoseparators1. 指定实现“撤销”操作的时候是否自动插入一个“分隔符”(用于分隔操作记录)
    2. 默认值是 True
    3. 详见上方用法【“撤销”和“恢复”操作】
    background1. 设置 Text 组件的背景颜色
    2. 注意:通过使用 Tags 可以使 Text 组件中的文本支持多种背景颜色显示(请参考上方【Tags 用法】)
    bg跟 background 一样
    borderwidth1. 设置 Entry 的边框宽度
    2. 默认值是 1 像素
    bd跟 borderwidth 一样
    cursor1. 指定当鼠标在 Text 组件上飘过的时候的鼠标样式
    2. 默认值由系统指定
    exportselection1. 指定选中的文本是否可以被复制到剪贴板
    2. 默认值是 True
    3. 可以修改为 False 表示不允许复制文本
    font1. 设置 Text 组件中文本的默认字体
    2. 注意:通过使用 Tags 可以使 Text 组件中的文本支持多种字体显示(请参考上方【Tags 用法】)
    foreground1. 设置 Text 组件中文本的颜色
    2. 注意:通过使用 Tags 可以使 Text 组件中的文本支持多种颜色显示(请参考上方【Tags 用法】)
    fg跟 foreground 一样
    height1. 设置 Text 组件的高度
    2. 注意:单位是行数,不是像素噢
    highlightbackground1. 指定当 Text 组件没有获得焦点的时候高亮边框的颜色
    2. 默认值由系统指定
    highlightcolor1. 指定当 Text 组件获得焦点的时候高亮边框的颜色
    2. 默认值由系统指定
    highlightthickness1. 指定高亮边框的宽度
    2. 默认值是 0
    insertbackground1. 设置插入光标的颜色
    2. 默认是 BLACK(或 "black")
    insertborderwidth1. 设置插入光标的边框宽度
    2. 默认值是 0
    3. 提示:你得设置 insertwidth 选项为比较大的数值才能看出来噢
    insertofftime1. 该选项控制光标的闪烁频率(灭)
    2. 单位是毫秒
    insertontime1. 该选项控制光标的闪烁频率(亮)
    2. 单位是毫秒
    insertwidth1. 指定光标的宽度
    2. 默认值是 2 像素
    maxundo1. 设置允许“撤销”操作的最大次数
    2. 默认值是 0
    3. 设置为 -1 表示不限制
    padx1. 指定水平方向上的额外间距(内容和边框间)
    2. 默认值是 1
    pady1. 指定垂直方向上的额外间距(内容和边框间)
    2. 默认值是 1
    relief1. 指定边框样式
    2. 默认值是 "sunken"
    3. 其他可以选择的值是 "flat","raised","groove" 和 "ridge"
    selectbackground1. 指定被选中文本的背景颜色
    2. 默认值由系统指定
    selectborderwidth1. 指定被选中文本的边框宽度
    2. 默认值是 0
    selectforeground1. 指定被选中文本的字体颜色
    2. 默认值由系统指定
    setgrid1. 指定一个布尔类型的值,确定是否启用网格控制
    2. 默认值是 False
    spacing11. 指定 Text 组件的文本块中每一行与上方的空白间隔
    2. 注意:自动换行不算
    3. 默认值是 0
    spacing21. 指定 Text 组件的文本块中自动换行的各行间的空白间隔
    2. 注意:换行符('\n')不算
    3. 默认值是 0
    spacing31. 指定 Text 组件的文本中每一行与下方的空白间隔 
    2. 注意:自动换行不算
    3. 默认值是 0
    state1. 默认情况下 Text 组件响应键盘和鼠标事件("normal")
    2. 如果将该选项的值设置为 "disabled",那么上述响应就不会发生,并且你无法修改里边的内容
    tabs1. 定制 Tag 所描述的文本块中 Tab 按键的功能
    2. 默认 Tab 被定义为 8 个字符的宽度
    3. 你还可以定义多个制表位:tabs=('3c', '5c', '12c') 表示前 3 个 Tab 宽度分别为 3厘米,5厘米,12厘米,接着的 Tab 按照最后两个的差值计算,即:19厘米,26厘米,33厘米
    4. 你应该注意到了,它上边 'c' 的含义是“厘米”而不是“字符”,还可以选择的单位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大约是 '1i' 等于 '72p')
    5. 如果是一个整型值,则单位是像素
    takefocus1. 指定使用 Tab 键可以将焦点移动到 Text 组件中
    2. 默认是开启的,可以将该选项设置为 False 避免焦点在此 Text 组件中
    undo1. 该选项设置为 True 开启“撤销”功能
    2. 该选项设置为 False 关闭“撤销”功能
    3. 默认值是 False
    width1. 设置 Text 组件的宽度
    2. 注意:单位是字符数,因此 Text 组件的实际宽度还取决于字体的大小
    wrap1. 设置当一行文本的长度超过 width 选项设置的宽度时,是否自动换行
    2. 该选项的值可以是:"none"(不自动换行),"char"(按字符自动换行)和 "word"(按单词自动换行)
    xscrollcommand1. 与 scrollbar(滚动条)组件相关联(水平方向)
    2. 使用方法可以参考:Scrollbar 组件
    yscrollcommand1. 与 scrollbar(滚动条)组件相关联(垂直方向)
    2. 使用方法可以参考:Scrollbar 组件

    方法

    bbox(index)
    -- 返回给定索引指定的字符的边界框
    -- 返回值是一个 4 元组:(x, y, width, height)
    -- 如果该字符是不可见的,那么返回 None
    -- 注意:只有当 Text 组件被更新的时候该方法才有效,可以使用 update_idletasks() 方法先更新 Text 组件

    compare(index1, op, index2)
    -- 返回对比 index1 和 index2 指定的两个字符的结果
    -- op 是操作符:'<', '<=', '==', '>=', '>' 或 '!='(不支持 Python 的 '<>' 操作符)
    -- 返回布尔类型的值表示对比的结果

    debug(boolean=None)
    -- 开启或关闭 Debug 状态

    delete(start, end=None)
    -- 删除给定范围的文本或嵌入对象
    -- 如果在给定范围内有任何 Marks 标记的位置,则将 Marks 移动到 start 参数开始的位置

    dlineinfo(index)
    -- 返回给定索引指定的字符所在行的边界框
    -- 返回值是一个 5 元组:(x, y, width, height, offset),offset 表示从该行的顶端到基线的偏移
    -- 如果该行不可见,则返回 None
    -- 注意:只有当 Text 组件被更新的时候该方法才有效,可以使用 update_idletasks() 方法先更新 Text 组件

    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 函数,那么会为列表中的每一个三元组作为参数调用一次该函数(这种情况下,dump() 不返回值)

    edit_modified(arg=None)
    -- 该方法用于查询和设置 modified 标志(该标标志用于追踪 Text 组件的内容是否发生变化)
    -- 如果不指定 arg 参数,那么返回 modified 标志是否被设置
    -- 你可以传递显式地使用 True 或 False 作为参数来设置或清除 modified 标志
    -- 任何代码或用户的插入或删除文本操作,“撤销”或“恢复”操作,都会是的 modified 标志被设置

    edit_redo(self)
    -- “恢复”上一次的“撤销”操作
    -- 如果 undo 选项为 False,该方法无效
    -- 详见上方用法【“撤销”和“恢复”操作】

    edit_reset()
    -- 清空存放操作记录的栈

    edit_separator()
    -- 插入一个“分隔符”到存放操作记录的栈中,用于表示已经完成一次完整的操作
    -- 如果 undo 选项为 False,该方法无效
    -- 详见上方用法【“撤销”和“恢复”操作】

    edit_undo()
    -- 撤销最近一次操作
    -- 如果 undo 选项为 False,该方法无效
    -- 详见上方用法【“撤销”和“恢复”操作】

    get(index1, index2=None)
    -- 返回 index1 到 index2(不包含)之间的文本
    -- 如果 index2 参数忽略,则返回一个字符
    -- 如果包含 image 和 window 的嵌入对象,均被忽略
    -- 如果包含有多行文本,那么自动插入换行符('\n')

    image_cget(index, option)
    -- 返回 index 参数指定的嵌入 image 对象的 option 选项的值
    -- 如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常

    image_configure(index, **options)
    -- 修改 index 参数指定的嵌入 image 对象的一个或多个 option 选项的值
    -- 如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常

    image_create(index, cnf={}, **kw)
    -- 在 index 参数指定的位置嵌入一个 image 对象
    -- 该 image 对象必须是 Tkinter 的 PhotoImage 或 BitmapImage 实例
    -- 可选选项 align:设定此图像的垂直对齐,可以是 "top"、"center"、"bottom" 或 "baseline"
    -- 可选选项 image:PhotoImage 或 BitmapImage 对象
    -- 可选选项 name:你可以为该图像实例命名,如果你忽略此选项,那么 Tkinter 会自动为其取一个独一无二的名字。
    -- 可选选项 padx:设置水平方向上的额外间距
    -- 可选选项 pady:设置垂直方向上的额外间距

    image_names()
    -- 返回 Text 组件中嵌入的所有 image 对象的名字

    index(index)
    -- 将 index 参数指定的位置以 "line.column" 的索引形式返回
    -- index 参数支持任何格式的索引

    insert(index, text, *tags)
    -- 在 index 参数指定的位置插入字符串
    -- 可选参数 tags 用于指定文本的样式
    -- 详见上方【Tags 用法】

    mark_gravity(self, markName, direction=None)
    -- 设置 Mark 的方向,可以是 "left" 或 "right"(默认是 "right",即如果在 Mark 处插入文本的话,Mark 将发生相应的移动以保持在插入文本的右侧)
    -- 如果设置为 "left",那么在 Mark 处插入文本并不会移动 Mark(因为 Mark 在插入文本的左侧)
    -- 如果忽略 direction 参数,则返回指定 Mark 的方向
    -- 详见上方【Marks 用法】

    mark_names()
    -- 返回 Text 组件中所有 Marks 的名字
    -- 包括两个特殊 Mark:"insert" 和 "current"
    -- 注意:"end" 是特殊的索引,不是 Mark

    mark_next(index)
    -- 返回在 index 指定的位置后边的一个 Mark 的名字
    -- 如果不存在则返回空字符串

    mark_previous(index)
    -- 返回在 index 指定的位置前边的一个 Mark 的名字
    -- 如果不存在则返回空字符串

    mark_set(markName, index)
    -- 移动 Mark 到 index 参数指定的位置
    -- 如果 markName 参数指定的 Mark 不存在,则创建一个新的 Mark

    mark_unset(*markNames)
    -- 删除 markNames 指定的 Marks
    -- 不能删除预定义的 "insert" 和 "current"

    replace(index1, index2, chars, *args)
    -- 将 index1 到 index2 之间的内容替换为 chars 参数指定的字符串
    -- 如果需要为替换的内容添加 Tag,可以在 args 参数指定 Tag
    -- 详见上方【Tags 用法】

    scan_dragto(x, y)
    -- 详见下方 scan_mark(x, y)

    scan_mark(x, y)
    -- 使用这种方式来实现 Text 组件内容的滚动
    -- 需要将鼠标按钮事件以及鼠标当前位置绑定到 scan_mark(x, y) 方法,然后将 <motion> 事件及当前鼠标位置绑定到 scan_dragto(x, y) 方法,就可以实现 Text 组件的内容在当前位置和 scan_mark(x, y) 指定的位置 (x, y) 之间滚动

    search(pattern, index, stopindex=None, forwards=None, backwards=None, exact=None, regexp=None, nocase=None, count=None)
    -- 从 index 开始搜索 pattern,到 stopindex 结束(不指定表示搜索到末尾)
    -- 如果成功找到,以 "line.column" 返回第一个匹配的字符;否则返回空字符串
    -- forwards 参数设置为 True 表示向前(->)搜索
    -- backwards 参数设置为 True 表示向后(<-)搜索
    -- exact 参数设置为 True 表示搜索与 pattern 完全匹配的结果
    -- regexp 参数设置为 True,则 pattern 被解释为 Tcl 格式的正则表达式
    -- nocase 参数设置为 True 是忽略大小写,默认是区分大小写的搜索
    -- count 参数指定为一个 IntVar 的 Tkinter 变量,用于存放当找到匹配的字符个数(如果匹配结果中没有嵌入的 image 或 window 对象的话,一般该值等于 pattern 的字符个数)

    see(index)
    -- 滚动内容,确保 index 指定的位置可见

    tag_add(tagName, index1, index2=None)
    -- 为 index1 到 index2 之间的内容添加一个 Tag(tagName 参数指定)
    -- 如果 index2 参数忽略,则单独为 index1 指定的内容添加 Tag
    -- 详见上方【Tags 用法】

    tag_bind(tagName, sequence, func, add=None)
    -- 为 Tag 绑定事件
    -- 详见上方【Tags 用法】

    tag_cget(tagName, option)
    -- 返回 tagName 指定的 option 选项的值

    tag_config(tagName, cnf=None, **kw)
    -- 跟 tag_configure(tagName, cnf=None, **kw) 一样

    tag_configure(tagName, cnf=None, **kw)
    -- 设置 tagName 的选项
    -- 详见上方【Tags 用法】

    tag_delete(*tagNames)
    -- 删除 tagNames 指定的 Tags

    tag_lower(tagName, belowThis=None)
    -- 降低 Tag 的优先级
    -- 如果 belowThis 参数不为空,则表示 tagName 需要比 belowThis 指定的 Tag 优先级更低
    -- 详见上方【Tags 用法】

    tag_names(index=None)
    -- 如果不带参数,表示返回 Text 组件中所有 Tags 的名字
    -- index 参数表示返回该位置上所有的 Tags 的名字

    tag_nextrange(tagName, index1, index2=None)
    -- 在 index1 到 index2 的范围内第一个 tagName 的位置
    -- 如果没有则返回空字符串

    tag_prevrange(tagName, index1, index2=None)
    -- tag_nextrange() 的反向查找,也就是查找范围是 index2 到 index1

    tag_raise(tagName, aboveThis=None)
    -- 提高 Tag 的优先级
    -- 如果 aboveThis 参数不为空,则表示 tagName 需要比 aboveThis 指定的 Tag 优先级更高
    -- 详见上方【Tags 用法】

    tag_ranges(tagName)
    -- 返回所有 tagName 指定的文本,并将它们的范围以列表的形式返回

    tag_remove(tagName, index1, index2=None)
    -- 删除 index1 到 index2 之间所有的 tagName
    -- 如果忽略 index2 参数,那么只删除 index1 指定的那个字符的 tagName(如果有的话)

    tag_unbind(tagName, sequence, funcid=None)
    -- 解除与 tagName 绑定的事件(sequence 指定)

    window_cget(index, option)
    -- 返回 index 参数指定的嵌入 window 对象的 option 选项的值
    -- 如果给定的位置没有嵌入 window 对象,则抛出 TclError 异常

    window_config(index, cnf=None, **kw)
    -- 跟 window_configure(index, cnf=None, **kw) 一样

    window_configure(index, cnf=None, **kw)
    -- 修改 index 参数指定的嵌入 window 对象的一个或多个 option 选项的值
    -- 如果给定的位置没有嵌入 window 对象,则抛出 TclError 异常

    window_create(index, **options)
    -- 在 index 参数指定的位置嵌入一个 window 对象
    -- 支持两种方式在 Text 组件中嵌入 window 对象:请看下方 create 选项和 window 选项的描述
    -- 可选选项 align:设定此图像的垂直对齐,可以是 "top"、"center"、"bottom" 或 "baseline"
    -- 可选选项 create:指定一个回调函数用于创建嵌入的 window 组件,该函数没有参数,并且必须创建 Text 的子组件并返回
    -- 可选选项 padx:设置水平方向上的额外间距
    -- 可选选项 pady:设置垂直方向上的额外间距
    -- 可选选项 stretch:该选项控制当行的高度大于嵌入组件的高度时,嵌入组件是否延伸。默认值是 False,表示组件保持原形;设置为 True 表示将该组件垂直部分延伸至行的高度
    -- 可选选项 window:指定一个已经创建好的 window 组件,该组件必须是 Text 组件的子组件

    window_names()
    -- 返回 Text 组件中嵌入的所有 window 对象的名字

    xview(*args)
    -- 该方法用于在水平方向上滚动 Text 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现(具体操作参考:Scrollbar
    -- 如果第一个参数是 "moveto",则第二个参数表示滚动到指定的位置:0.0 表示最左端,1.0 表示最右端
    -- 如果第一个参数是 "scroll",则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 "units" 或 "pages"),例如:xview("scroll", 3, "units") 表示向右滚动三行

    xview_moveto(fraction)
    -- 跟 xview("moveto", fraction) 一样

    xview_scroll(number, what)
    -- 跟 xview("scroll", number, what) 一样

    yview(*args)
    -- 该方法用于在垂直方向上滚动 Text 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现(具体操作参考:Scrollbar
    -- 如果第一个参数是 "moveto",则第二个参数表示滚动到指定的位置:0.0 表示最顶端,1.0 表示最底端
    -- 如果第一个参数是 "scroll",则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 "units" 或 "pages"),例如:yview("scroll", 3, "pages") 表示向下滚动三页

    yview_moveto(fraction)
    -- 跟 yview("moveto", fraction) 一样

    yview_scroll(number, what)
    -- 跟 yview("scroll", number, what) 一样

    展开全文
  • Tkinter 组件详解(七):Entry

    万次阅读 多人点赞 2018-12-20 13:57:40
    Tkinter 组件详解之Entry Entry(输入框)组件通常用于获取用户的输入文本。 何时使用 Entry 组件? Entry 组件仅允许用于输入一行文本,如果用于输入的字符串长度比该组件可显示空间更长,那内容将被滚动。这...

    Tkinter 组件详解之Entry

    Entry(输入框)组件通常用于获取用户的输入文本。

    何时使用 Entry 组件?

    Entry 组件仅允许用于输入一行文本,如果用于输入的字符串长度比该组件可显示空间更长,那内容将被滚动。这意味着该字符串将不能被全部看到(你可以用鼠标或键盘的方向键调整文本的可见范围)。

    如果你希望接收多行文本的输入,可以使用 Text 组件(后面介绍)

    用法

    使用代码为 Entry 组件添加文本,可以使用 insert() 方法。如果要替换当前文本,可以先使用 delete() 方法,再使用 insert() 方法实现:

    import tkinter as tk
    
    master = tk.Tk()
    
    e = tk.Entry(master)
    e.pack(padx=20, pady=20)
    
    e.delete(0, "end")
    e.insert(0, "默认文本...")
    
    master.mainloop()
    

    获取当前输入框的文本,可以使用 get() 方法:

    s = e.get()

    你也可以绑定 Entry 组件到 Tkinter 变量(StringVar),并通过该变量设置和获取输入框的文本:

    v = tk.StringVar()
    e = tk.Entry(master, textvariable=v)
    e.pack()
    
    v.set("I love Python!")
    s = v.get()

    下边的例子演示将 Entry 组件和 Button 组件配合,点击 “获取信息” 按钮时自动清空输入框并将内容输出:

    import tkinter as tk
    
    master = tk.Tk()
    
    tk.Label(master, text="作品:").grid(row=0)
    tk.Label(master, text="作者:").grid(row=1)
    
    e1 = tk.Entry(master)
    e2 = tk.Entry(master)
    e1.grid(row=0, column=1, padx=10, pady=5)
    e2.grid(row=1, column=1, padx=10, pady=5)
    
    def show():
        print("作品:《%s》" % e1.get())
        print("作者:%s" % e2.get())
        e1.delete(0, "end")
        e2.delete(0, "end")
    
    tk.Button(master, text="获取信息", width=10, command=show).grid(row=3, column=0, sticky="w", padx=10, pady=5)
    tk.Button(master, text="退出", width=10, command=master.quit).grid(row=3, column=1, sticky="e", padx=10, pady=5)
    
    master.mainloop()

    最后需要提到的是 Entry 组件允许通过以下几种方式指定字符的位置:

    • 数字索引号
    • "anchoe"
    • "end"
    • "insert"
    • 鼠标坐标("@x")

    数字索引号:常规的 Python 索引号,从 0 开始

    "anchor":对应第一个被选中的字符(如果有的话)

    "end":对应已存在文本的后一个位置

    "insert":对应插入光标的当前位置

    鼠标坐标("@x"):x 是鼠标位置与 Entry 左侧边缘的水平距离,这样就可以通过鼠标相对地定位字符的位置

    参数

    Entry(master=None, **options) (class)

    master -- 父组件

    **options -- 组件选项,下方表格详细列举了各个选项的具体含义和用法:

    选项含义
    background1. 设置 Entry 的背景颜色
    2. 默认值由系统指定
    bg跟 background 一样
    borderwidth1. 设置 Entry 的边框宽度
    2. 默认值是 1 或 2 像素
    bd跟 borderwidth 一样
    cursor1. 指定当鼠标在 Entry 上飘过的时候的鼠标样式
    2. 默认值由系统指定
    exportselection1. 指定选中的文本是否可以被复制到剪贴板
    2. 默认值是 True
    3. 可以修改为 False 表示不允许复制文本
    font1. 指定 Entry 中文本的字体
    2. 默认值由系统指定
    foreground1. 设置 Entry 的文本颜色
    2. 默认值由系统指定
    fg跟 foreground 一样
    highlightbackground1. 指定当 Entry 没有获得焦点的时候高亮边框的颜色
    2. 默认值由系统指定
    highlightcolor1. 指定当 Entry 获得焦点的时候高亮边框的颜色
    2. 默认值由系统指定
    highlightthickness1. 指定高亮边框的宽度
    2. 默认值是 1 或 2 像素
    insertbackground指定输入光标的颜色
    insertborderwidth1. 指定输入光标的边框宽度
    2. 如果被设置为非 0 值,光标样式会被设置为 RAISED
    3. 小甲鱼温馨提示:将 insertwidth 设置大一点才能看到效果哦
    insertofftime1. 该选项控制光标的闪烁频率(灭)
    2. 单位是毫秒
    insertontime1. 该选项控制光标的闪烁频率(亮)
    2. 单位是毫秒
    insertwidth1. 指定光标的宽度
    2. 默认值是 1 或 2 像素
    invalidcommand1. 指定当输入框输入的内容“非法”时调用的函数
    2. 也就是指定当 validateCommand 选项指定的函数返回 False 时的函数
    3. 详见本内容最下方小甲鱼关于验证详解
    invcmd跟 invalidcommand 一样
    justify1. 定义如何对齐输入框中的文本
    2. 使用 "left","right" 或 "center"
    3. 默认值是 "left"
    relief1. 指定边框样式
    2. 默认值是 "sunken"
    3. 其他可以选择的值是 "flat","raised","groove" 和 "ridge"
    selectbackground1. 指定输入框的文本被选中时的背景颜色
    2. 默认值由系统指定
    selectborderwidth1. 指定输入框的文本被选中时的边框宽度(选中边框)
    2. 默认值由系统指定
    selectforeground1. 指定输入框的文本被选中时的字体颜色
    2. 默认值由系统指定
    show1. 设置输入框如何显示文本的内容
    2. 如果该值非空,则输入框会显示指定字符串代替真正的内容
    3. 将该选项设置为 "*",则是密码输入框
    state1. Entry 组件可以设置的状态:"normal","disabled" 或 "readonly"(注意,它跟 "disabled" 相似,但它支持选中和拷贝,只是不能修改,而 "disabled" 是完全禁止)
    2. 默认值是 "normal"
    3. 注意,如果此选项设置为 "disabled" 或 "readonly",那么调用 insert() 和 delete() 方法都会被忽略
    takefocus1. 指定使用 Tab 键可以将焦点移动到输入框中
    2. 默认是开启的,可以将该选项设置为 False 避免焦点在此输入框中
    textvariable1. 指定一个与输入框的内容相关联的 Tkinter 变量(通常是 StringVar)
    2. 当输入框的内容发生改变时,该变量的值也会相应发生改变
    validate1. 该选项设置是否启用内容验证 
    2. 详见本内容最下方小甲鱼关于验证详解
    validatecommand1. 该选项指定一个验证函数,用于验证输入框内容是否合法
    2. 验证函数需要返回 True 或 False 表示验证结果
    3. 注意,该选项只有当 validate 的值非 "none" 时才有效
    3. 详见本内容最下方小甲鱼关于验证详解
    vcmd跟 validatecommand 一样
    width1. 设置输入框的宽度,以字符为单位
    2. 默认值是 20
    3. 对于变宽字体来说,组件的实际宽度等于字体的平均宽度乘以 width 选项的值
    xscrollcommand1. 与 scrollbar(滚动条)组件相关联
    2. 如果你觉得用户输入的内容会超过该组件的输入框宽度,那么可以考虑设置该选项
    3. 使用方法可以参考:Scrollbar 组件

    方法

    delete(first, last=None) 

    -- 删除参数 first 到 last 范围内(包含 first 和 last)的所有内容
    -- 如果忽略 last 参数,表示删除 first 参数指定的选项
    -- 使用 delete(0, END) 实现删除输入框的所有内容

    get()

    -- 获得当前输入框的内容

    icursor(index)

    -- 将光标移动到 index 参数指定的位置
    -- 这同时也会设置 INSERT 的值

    index(index) 

    -- 返回与 index 参数相应的选项的序号(例如 e.index(END))

    insert(index, text) 

    -- 将 text 参数的内容插入到 index 参数指定的位置
    -- 使用 insert(INSERT, text) 将 text 参数指定的字符串插入到光标的位置
    -- 使用 insert(END, text) 将 text 参数指定的字符串插入到输入框的末尾

    scan_dragto(x) 

    --  见下方 scan_mark(x)

    scan_mark(x)

    -- 使用这种方式来实现输入框内容的滚动
    -- 需要将鼠标按下事件绑定到 scan_mark(x) 方法(x 是鼠标当前的水平位置),然后再将 <motion> 事件绑定到 scan_dragto(x) 方法(x 是鼠标当前的水平位置),就可以实现输入框在当前位置和 sacn_mack(x) 指定位置之间的水平滚动

    select_adjust(index)
    -- 与 selection_adjust(index) 相同,见下方解释

    select_clear()
    -- 与 selection_clear() 相同,见下方解释

    select_from(index)
    -- 与 selection_from(index) 相同,见下方解释

    select_present()
    -- 与 selection_present() 相同,见下方解释

    select_range(start, end)
    -- 与 selection_range(start, end) 相同,见下方解释

    select_to(index)
    -- 与 selection_to(index) 相同,见下方解释

    selection_adjust(index)
    -- 该方法是为了确保输入框中选中的范围包含 index 参数所指定的字符
    -- 如果选中的范围已经包含了该字符,那么什么事情也不会发生
    -- 如果选中的范围不包含该字符,那么会从光标的位置将选中的范围扩展至该字符

    selection_clear()
    -- 取消选中状态

    selection_from(index)
    -- 开始一个新的选中范围
    -- 会设置 ANCHOR 的值

    selection_present()
    -- 返回输入框是否有处于选中状态的文本
    -- 如果有则返回 True,否则返回 False

    selection_range(start, end)
    -- 设置选中范围
    -- start 参数必须必 end 参数小
    -- 使用 selection_range(0, END) 选中整个输入框的所有内容

    selection_to(index)
    -- 选中 ANCHOR 到 index 参数的间的所有内容

    xview(index)
    -- 该方法用于确保给定的 index 参数所指定的字符可见
    -- 如有必要,会滚动输入框的内容

    xview_moveto(fraction)
    -- 根据 fraction 参数给定的比率调整输入框内容的可见范围
    -- fraction 参数的范围是 0.0 ~ 1.0,0.0 表示输入框的开始位置,1.0 表示输入框的结束位置

    xview_scroll(number, what)
    -- 根据给定的参数水平滚动输入框的可见范围
    -- number 参数指定滚动的数量,如果是负数则表示反向滚动
    -- what 参数指定滚动的单位,可以是 UNITS 或 PAGES(UNITS 表示一个字符单元,PAGES 表示一页)

    关于验证详解

    由于查看了不少资料,很多在这里都没有解释清楚,所以这里单独列出来详细讲解下。

    Entry 组件是支持验证输入内容的合法性的,比如要求输入数字,你输入了字母那就是非法。实现该功能,需要通过设置 validate、validatecommand 和 invalidcommand 选项。

     

    首先启用验证的“开关”是 validate 选项,该选项可以设置的值有:

    含义
    'focus'当 Entry 组件获得或失去焦点的时候验证
    'focusin'当 Entry 组件获得焦点的时候验证
    'focusout'当 Entry 组件失去焦点的时候验证
    'key'当输入框被编辑的时候验证
    'all'当出现上边任何一种情况的时候验证
    'none'1. 关闭验证功能
    2. 默认设置该选项(即不启用验证)
    3. 注意,是字符串的 'none',而非 None

    其次是为 validatecommand 选项指定一个验证函数,该函数只能返回 True 或 False 表示验证的结果。一般情况下验证函数只需要知道输入框的内容即可,可以通过 Entry 组件的 get() 方法获得该字符串。

    下边的例子中,在第一个输入框输入“CSDN” 并通过 Tab 键或者鼠标将焦点转移到第二个输入框的时候,验证功能被成功触发:

    import tkinter as tk
    
    master = tk.Tk()
    
    def test():
        if e1.get() == "CSDN":
            print("正确!")
            return True
        else:
            print("错误!")
            e1.delete(0, "end")
            return False
    
    v = tk.StringVar()
    
    e1 = tk.Entry(master, textvariable=v, validate="focusout", validatecommand=test)
    e2 = tk.Entry(master)
    e1.pack(padx=10, pady=10)
    e2.pack(padx=10, pady=10)
    
    master.mainloop()

    然后,invalidcommand 选项指定的函数只有在 validatecommand 的返回值为 False 的时候才被调用。

    下边的例子中,在第一个输入框输入“csdn”,并通过 Tab 键将焦点转移到第二个输入框,validatecommand 指定的验证函数被触发并返回 False,接着 invalidcommand 被触发:

    import tkinter as tk
    
    master = tk.Tk()
    
    def test():
        if e1.get() == "CSDN":
            print("正确!")
            return True
        else:
            print("错误!")
            e1.delete(0, "end")
            return False
    
    def test2():
        print("我被调用了......")
        return True
    
    v = tk.StringVar()
    
    e1 = tk.Entry(master, textvariable=v, validate="focusout", validatecommand=test, invalidcommand=test2)
    e2 = tk.Entry(master)
    e1.pack(padx=10, pady=10)
    e2.pack(padx=10, pady=10)
    
    master.mainloop()

    最后,其实 Tkinter 还有隐藏技能,不过需要冷却才能触发,请听我一一道来......

    Tkinter 为验证函数提供一些额外的选项:

    额外选项含义
    '%d'操作代码:0 表示删除操作;1 表示插入操作;2 表示获得、失去焦点或 textvariable 变量的值被修改
    '%i'1. 当用户尝试插入或删除操作的时候,该选线表示插入或删除的位置(索引号)
    2. 如果是由于获得、失去焦点或 textvariable 变量的值被修改而调用验证函数,那么该值是 -1
    '%P'1. 当输入框的值允许改变的时候,该值有效
    2. 该值为输入框的最新文本内容
    '%s'该值为调用验证函数前输入框的文本内容
    '%S'1. 当插入或删除操作触发验证函数的时候,该值有效
    2. 该选项表示文本被插入和删除的内容
    '%v'该组件当前的 validate 选项的值
    '%V'1. 调用验证函数的原因
    2. 该值是 'focusin','focusout','key' 或 'forced'(textvariable 选项指定的变量值被修改)中的一个
    '%W'该组件的名字

    为了使用这些选项,你可以这样写:validatecommand=(f, s1, s2, ...)

    其中,f 就是你“冷却后”的验证函数名,s1、s2、s3 这些是额外的选项,这些选项会作为参数依次传给 f 函数。我们刚刚说了,使用隐藏技能前需要冷却,其实就是调用 register() 方法将验证函数包装起来:

    import tkinter as tk
    
    master = tk.Tk()
    
    v = tk.StringVar()
    
    def test(content, reason, name):
        if content == "CSDN":
            print("正确!")
            print(content, reason, name)
            return True
        else:
            print("错误!")
            print(content, reason, name)
            return False
    
    testCMD = master.register(test)
    e1 = tk.Entry(master, textvariable=v, validate="focusout", validatecommand=(testCMD, '%P', '%v', '%W'))
    e2 = tk.Entry(master)
    e1.pack(padx=10, pady=10)
    e2.pack(padx=10, pady=10)
    
    master.mainloop()

    当我故意输入“CSDN我爱你”的时候,DUANG的一下,是错误的,后来我果断删除了“我爱你”,嘿,又正确了:

     

    展开全文
  • Tkinter 组件详解(二):Button

    万次阅读 多人点赞 2018-12-19 08:16:45
    Tkinter 组件详解之Button 简介 Button(按钮)组件用于实现各种各样的按钮。Button 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被自动执行。 ...

    Tkinter 组件详解之Button

    简介

    Button(按钮)组件用于实现各种各样的按钮。Button 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被自动执行。

    Button 组件仅能显示单一字体的文本,但文本可以跨越多行。另外,还可以为其中的个别字符加上下划线(例如用于表示键盘快捷键)。默认情况下,tab 按键被用于在按钮间切换。

    何时使用 Button 组件?

    简而言之,Button 组件是用于让用户说:“干!”,通过按钮上的文字或图标让用户清楚按下去是干什么用的。Button 组件常常被用于工具栏、应用程序窗口、和表示接受或拒绝的对话框。Checkbutton 和 Radiobutton 

    CheckbuttonRadiobutton 组件 更适合做数据输入按钮使用。

    用法

    普通的按钮是非常简单易用的。你所需要做的就是指定 Button 的内容(文本、位图或者图片),并且关联当按钮被按下时应该调用的函数或方法:

    import tkinter as tk
    
    master = tk.Tk()
    
    def callback():
        print("我被调用了!")
    
    b = tk.Button(master, text="执行", command=callback)
    b.pack()
    
    master.mainloop()

    >>> 
    =============== RESTART===============
    我被调用了!

     如果一个按钮没有相关联的函数或方法,那么它就形同虚设。你可能在开发程序的过程中会使用到这样的按钮,在这种情况下,更好的方法是禁用这些按钮,从而避免导致你的测试用户产生疑惑。

    b = tk.Button(master, text="不执行", state="disabled")

     

    如果你没有指定 Label 的大小,那么 Label 的尺寸是正好可以容纳其内容而已。你可以使用 padx 和 pady 选项在 Button 的内容和边框间添加额外的间距。

    当然你可以通过 height 和 width 选项来明确设置 Button 的大小:如果你显示的是文本,那么这两个选项是以文本单元为单位定义 Button 的大小;如果你显示的是位图或者图像,那么它们以像素为单位(或者其他屏幕单元)定义 Button 大小。

    对于内容为文本的 Button 组件,你可以使用像素为单位指定 Buttton 的尺寸,不过这需要一些技巧。这里提供一个方法给大家参考(还有其它方法实现):

    f = tk.Frame(master, height=64, width=64)
    f.pack_propagate(0)
    f.pack()
    
    b = tk.Button(f, text="确定", command=callback)
    b.pack(fill="both", expand=1)

    Button 可以显示多行文本,你可以直接使用换行符或使用 wraplength 选项来实现。当文本换行的时候,你可以使用 anchor 和 justify 以及 padx 选项来使得文本如你所希望的显示出来:

    longtext = """
    我明明只是一个按钮,
    作为按钮并不需要太多
    的文字用于告诉用户当
    我被按下的时候会发生
    什么事情,但我为什么
    这么长?
    """
    b = tk.Button(master, text=longtext, anchor="w", justify="left", padx=2, command=callback)
    b.pack()

     

    为了使一个普通的按钮保持被“按下”的状态,例如你希望通过某种方式实现一个工具箱(像 Photoshop 左侧的工具栏按钮,按下的时候他保持凹下去,说明你正在使用此工具),你可以简单的将 relief 选项的默认值 "raised" 改为 "sunken":

    b.config(relief="raised")

    你或许也希望修改背景色。不过更好的方法是使用 CheckbuttonRadiobutton 组件,并把它们的 indicatoron 选项设置为 False:

    b = tk.Checkbutton(master, image=bold, variable=var, indicatoron=False)

    在早期版本的 Tkinter 中,image 选项会覆盖 text 选项。也就是说如果你同时指定了两个选项,那么只有 image 选项会被显示。但在新的 Tkinter 中,你可以使用 compound 选项设置二者的混合模式。例如下边就是通过设置 compound="center" 使得文字位于图片的上方(重叠显示):

    photo = tk.PhotoImage(file = 'botton.gif')
    b = tk.Button(master, text="点我", font = 20, image = photo, compound = "center")
    
    b.pack()
    

    通过 "left","right","top" 和 "bottom" 则可以设置文字在图像的旁边显示:

    b = tk.Button(master, text="点它 ->", font = 20, image = photo, compound = "right")

    参数

    Button(master=None, **options) (class)

    master -- 父组件

    **options -- 组件选项,下方表格详细列举了各个选项的具体含义和用法:

    选项含义
    activebackground1. 设置当 Button 处于活动状态(通过 state 选项设置状态)的背景色
    2. 默认值由系统指定
    activeforeground1. 设置当 Button 处于活动状态(通过 state 选项设置状态)的前景色
    2. 默认值由系统指定
    anchor

    1. 控制文本(或图像)在 Button 中显示的位置

    2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或者 "center" 来定位(ewsn 代表东西南北,上北下南左西右东)
    3. 默认值是 "center"

    background1. 设置背景颜色
    2. 默认值由系统指定
    bg跟 background 一样
    bitmap1. 指定显示到 Button 上的位图
    2. 如果指定了 image 选项,则该选项被忽略
    borderwidth1. 指定 Button 的边框宽度
    2. 默认值由系统指定,通常是 1 或 2 像素
    bd跟 borderwidth 一样
    compound

    1. 控制 Button 中文本和图像的混合模式
    2. 默认情况下,如果有指定位图或图片,则不显示文本

    3. 如果该选项设置为 "center",文本显示在图像上(文本重叠图像)
    4. 如果该选项设置为 "bottom","left","right" 或 "top",那么图像显示在文本的旁边(如 "bottom",则图像在文本的下方)
    5. 默认值是 NONE

    cursor1. 指定当鼠标在 Button 上飘过的时候的鼠标样式
    2. 默认值由系统指定
    default1. 如果设置该选项("normal"),该按钮会被绘制成默认按钮
    2. Tkinter 会根据平台的具体指标来绘制(通常就是绘制一个额外的边框)
    2. 默认值是 "disable"
    disabledforeground1. 指定当 Button 不可用的时候前景色的颜色
    2. 默认值由系统指定
    font1. 指定 Button 中文本的字体
    2. 一个 Button 只能设置一种字体
    3. 默认值由系统指定
    foreground1. 设置 Button 的文本和位图的颜色
    2. 默认值由系统指定
    fg跟 foreground 一样
    height1. 设置 Button 的高度
    2. 如果 Button 显示的是文本,那么单位是文本单元
    3. 如果 Button 显示的是图像,那么单位是像素(或屏幕单元)
    4. 如果设置为 0 或者干脆不设置,那么会自动根据 Button 的内容计算出高度
    highlightbackground1. 指定当 Button 没有获得焦点的时候高亮边框的颜色
    2. 默认值由系统指定
    highlightcolor1. 指定当 Button 获得焦点的时候高亮边框的颜色
    2. 默认值由系统指定
    highlightthickness1. 指定高亮边框的宽度
    2. 默认值是 0(不带高亮边框)
    image1. 指定 Button 显示的图片
    2. 该值应该是 PhotoImage,BitmapImage,或者能兼容的对象
    3. 该选项优先于 text 和 bitmap 选项
    justify

    1. 定义如何对齐多行文本

    2. 使用 "left","right" 或 "center"
    3. 注意,文本的位置取决于 anchor 选项
    4. 默认值是 "center"

    overrelief1. 定义当鼠标飘过时 Button 的样式
    2. 如果不设置,那么总是使用 relief 选项指定的样式
    padx指定 Button 水平方向上的额外间距(内容和边框间)
    pady指定 Button 垂直方向上的额外间距(内容和边框间)
    relief1. 指定边框样式
    2. 通常当按钮被按下时是 "sunken",其他时候是 "raised"
    3. 另外你还可以设置 "groove"、"ridge" 或 "flat"
    4. 默认值是 "raised"
    repeatdelay见下方 repeatinterval 选项的描述
    repeatinterval1. 通常当用户鼠标按下按钮并释放的时候系统认为是一次点击动作。如果你希望当用户持续按下按钮的时候(没有松开),根据一定的间隔多次触发按钮,那么你可以设置这个选项。
    2. 当用户持续按下按钮的时候,经过 repeatdelay 时间后,每 repeatinterval 间隔就触发一次按钮事件。
    3. 例如设置 repeatdelay=1000,repeatinterval=300,则当用户持续按下按钮,在 1 秒的延迟后开始每 300 毫秒触发一次按钮事件,直到用户释放鼠标。
    state1. 指定 Button 的状态
    2. 默认值是 "normal"
    3. 另外你还可以设置 "active" 或 "disabled"
    takefocus1. 指定使用 Tab 键可以将焦点移到该 Button 组件上(这样按下空格键也相当于触发按钮事件)
    2. 默认是开启的,可以将该选项设置为 False 避免焦点在此 Button 上
    text1. 指定 Button 显示的文本
    2. 文本可以包含换行符
    3. 如果设置了 bitmap 或 image 选项,该选项则被忽略
    textvariable1. Button 显示 Tkinter 变量(通常是一个 StringVar 变量)的内容
    2. 如果变量被修改,Button 的文本会自动更新
    underline1. 跟 text 选项一起使用,用于指定哪一个字符画下划线(例如用于表示键盘快捷键) 
    2. 默认值是 -1
    3. 例如设置为 1,则说明在 Button 的第 2 个字符处画下划线
    width1. 设置 Button 的宽度
    2. 如果 Button 显示的是文本,那么单位是文本单元
    3. 如果 Button 显示的是图像,那么单位是像素(或屏幕单元)
    4. 如果设置为 0 或者干脆不设置,那么会自动根据 Button 的内容计算出宽度
    wraplength1. 决定 Button 的文本应该被分成多少行
    2. 该选项指定每行的长度,单位是屏幕单元
    3. 默认值是 0

    方法

    flash() 

    -- 刷新 Button 组件,该方法将重绘 Button 组件若干次(在 "active" 和 "normal" 状态间切换)。

    invoke() 

    -- 调用 Button 中 command 选项指定的函数或方法,并返回函数的返回值。
    -- 如果 Button 的state(状态)是 "disabled"(不可用)或没有指定 command 选项,则该方法无效。

    展开全文
  • label组件是用于在界面上输出你所描述内容的标签。如下所示: button控件用于实现一个按钮的创建,他的大部分选项与label控件是一样的,不过button拥有实现接收用户信息的功能。这是label组件所没有的。 具体实例...
  • Tkinter 组件详解(五):Frame

    万次阅读 多人点赞 2018-12-20 10:04:03
    Tkinter 组件详解之Frame Frame(框架)组件是在屏幕上的一个矩形区域。Frame 主要是作为其他组件的框架基础,或为其他组件提供间距填充。 何时使用 Frame 组件? Frame 组件主要用于在复杂的布局中将其他组件...
  • Tkinter 组件详解(三):Checkbutton

    万次阅读 多人点赞 2018-12-19 21:43:10
    Tkinter 组件详解之Checkbutton Checkbutton(多选按钮)组件用于实现确定是否选择的按钮。Checkbutton 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将...
  • Tkinter 组件详解(十二):Canvas

    万次阅读 多人点赞 2018-12-27 10:20:32
    Canvas(画布)组件Tkinter 的图形绘制提供了基础。Canvas 是一个高度灵活的组件,你可以用它绘制图形和图表,创建图形编辑器,并实现各种自定义的小部件。 何时使用 Canvas 组件? Canvas 是一个通用的组件,...
  • Tkinter组件详解(六):Text

    千次阅读 2019-12-29 14:02:35
    Tkinter组件详解之Listbox Text(文本)组件用于显示和处理多行文本。在 Tkinter 的所有组件中,Text 组件显得异常强大和灵活,适用于多种任务。虽然该组件的主要目的是显示多行文本,但它常常也被用于作为简单的...
  • Tkinter 组件详解(一):Label

    万次阅读 多人点赞 2018-12-18 21:35:06
    Tkinter 组件详解之Label Label(标签)组件用于在屏幕上显示文本或图像。Label 组件仅能显示单一字体的文本,但文本可以跨越多行。另外,还可以为其中的个别字符加上下划线(例如用于表示键盘快捷键)。 何时使用...
  • Tkinter 组件详解(十六):Message

    万次阅读 2019-01-02 09:08:40
    Message(消息)组件是 Label 组件的变体,用于显示多行文本消息。Message 组件能够自动换行,并调整文本的尺寸使其适应给定的尺寸。 何时使用 Message 组件? Message 组件用于显示简单的文本消息,通常你可以...
  • Tkinter 组件详解(八):Listbox

    万次阅读 多人点赞 2018-12-20 14:28:21
    Tkinter 组件详解之Listbox Listbox(列表框)组件用于显示一个选择列表。Listbox 只能包含文本项目,并且所有的项目都需要使用相同的字体和颜色。根据组件的配置,用户可以从列表中选择一个或多个选项。 何时使用...
  • Tkinter组件详解(七):Canvas

    千次阅读 2019-12-29 14:32:41
    Tkinter组件详解之Canvas Canvas(画布)组件为 Tkinter 的图形绘制提供了基础。Canvas 是一个高度灵活的组件,你可以用它绘制图形和图表,创建图形编辑器,并实现各种自定义的小部件。 何时使用 Canvas 组件? ...
  • Tkinter 组件详解(十):Scale

    千次阅读 2018-12-20 15:08:07
    Tkinter 组件详解之Scale Scale(刻度)组件看起来像是一个带数据的 Scrollbar(滚动条)组件,但事实上它们是不同的两个东东。Scale 组件允许用于通过滑动滑块来选择一个范围内的数字。你可以控制该组件的最大值、...
  • Tkinter组件详解之Listbox Listbox(列表框)组件用于显示一个选择列表。Listbox 只能包含文本项目,并且所有的项目都需要使用相同的字体和颜色。根据组件的配置,用户可以从列表中选择一个或多个选项。 Listbox...
  • Tkinter 组件详解(九):Scrollbar

    万次阅读 多人点赞 2018-12-20 14:40:21
    Tkinter 组件详解之Scrollbar Scrollbar(滚动条)组件用于滚动一些组件的可见范围,根据方向可分为垂直滚动条和水平滚动条。Scrollbar 组件常常被用于实现文本、画布和列表框的滚动。 何时使用 Scrollbar 组件? ...
  • Tkinter 组件详解(四):Radiobutton

    万次阅读 多人点赞 2018-12-19 21:58:33
    Tkinter 组件详解之Radiobutton Radiobutton(单选按钮)组件用于实现多选一的问题。Radiobutton 组件可以包含文本或图像,每一个按钮都可以与一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或...
  • Tkinter 组件详解(六):LabelFrame

    万次阅读 2018-12-20 10:12:19
    Tkinter 组件详解之LabelFrame LabelFrame 组件是 Frame 组件的变体。默认情况下,LabelFrame 会在其子组件的周围绘制一个边框以及一个标题。 何时使用 LabelFrame 组件? 当你想要将一些相关的组件分为一组的...
  • Python GUI编程实战--Tkinter组件详解:ListBox

    万次阅读 多人点赞 2018-11-05 14:50:35
    Listbox 组件通常被用于显示一组文本选项,Listbox 组件跟 Checkbutton 和Radiobutton 组件类似,不过 Listbox 是以列表的形式来提供选项的(后两个是通过按钮的形式)。 语法 Listbox(master=None, **options) ...
  • Tkinter 组件详解(十三):Menu

    万次阅读 多人点赞 2018-12-27 10:37:59
    Menu(菜单)组件用于实现顶级菜单、下拉菜单和弹出菜单。 何时使用 Menu 组件? Menu 组件通常被用于实现应用程序上的各种菜单,由于该组件是底层代码实现,所以不建议你...import tkinter as tk root = tk.T...
  • Tkinter 组件详解(十八):PanedWindow

    千次阅读 2019-01-02 09:42:05
    PanedWindow 组件(Tk8.4 新增)是一个空间管理组件。跟 Frame 组件类似,都是为组件提供一个框架,不过 PanedWindow 允许让用户调整应用程序的空间划分。 何时使用 PanedWindow 组件? 当你需要提供一个可供用户...
  • 主要介绍了python tkinter组件摆放方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Tkinter 组件详解之Checkbutton Checkbutton(多选按钮)组件用于实现确定是否选择的按钮。Checkbutton 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法...
  • Tkinter 组件详解(十七):Spinbox

    万次阅读 2019-01-02 09:28:37
    Spinbox 组件(Tk8.4 新增)是 Entry 组件的变体,用于从一些固定的值中选取一个。 何时使用 Spinbox 组件? Spinbox 组件通常用于在限定数字中选取的情况下代替普通的 Entry 组件。 注意:Spinbox 组件仅支持 ...
  • Tkinter 组件详解(十九):Toplevel

    万次阅读 2019-01-02 09:59:00
    Toplevel(顶级窗口)组件类似于 Frame 组件,但 Toplevel 组件是一个独立的顶级窗口,这种窗口通常拥有标题栏、边框等部件。 何时使用 Toplevel 组件? Toplevel 组件通常用在显示...import tkinter as tk r...
  • Tkinter 组件详解之Entry Entry(输入框)组件通常用于获取用户的输入文本。 Entry 组件仅允许用于输入一行文本,如果用于输入的字符串长度比该组件可显示空间更长,那内容将被滚动。这意味着该字符串将不能被...
  • Tkinter 组件详解之Label Label(标签)组件用于在屏幕上显示文本或图像。Label 组件仅能显示单一字体的文本,但文本可以跨越多行。另外,还可以为其中的个别字符加上下划线(例如用于表示键盘快捷键)。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 757
精华内容 302
关键字:

tkinter组件详解