zoukankan      html  css  js  c++  java
  • 《tkinter实用教程五》tkinter ttk.Frame控件

    本教程是博主个人心血,未经允许不可引用,引用必举报,举报必封号。

    《tkinter实用教程一》Linux 环境下安装tkinter

    《tkinter实用教程二》tkinter 子模块 ttk

    《tkinter实用教程三》tkinter Button 控件

    《tkinter实用教程四》tkinter 布局管理 Grid

    《tkinter实用教程五》tkinter ttk.Frame控件

    tkinter ttk.Frame 控件

    本系列文章中提到的控件,特指 ttk 模块下的对应控件。

    相比于前文提到的 ttk.Button 控件,ttk.Frame 控件可能相对陌生,实际上,Frame 控件是比 Button 更为基础的控件。

    简单来讲,一个 Frame 就是一个展示单纯的矩形区域的控件,类似于 html 中的 div 标签。

    从视觉上和编码上组织用户界面,是 Frame 的一个重要用途,我们通常把其他控件放置在 Frame 中,而不是直接放置在 Tk() 窗口中。

    如何创建一个 Frame

    创建 Frame 和创建其他控件的步骤一样,首先要创建 ttk.Frame 对象,然后把它放置在窗口中即可。

    示例代码如下:

    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    s = ttk.Style()
    s.configure("1.TFrame",background='red')
    frame = ttk.Frame(root,style="1.TFrame",width=100,height=100)
    frame.grid(column=0,row=0)
    
    root.mainloop()
    

    由于 ttk.Frame 默认风格在窗口中难以分辨位置,所以将其背景设置为红色。

    代码执行结果如下:

    如何创建一个ttk.Frame

    ttk.Framepadding 参数

    padding 参数用于指定位于 Frame 内部控件四周空间的大小。

    简单讲,就是放置在 Frame 中的控件距离 Frame 边框的距离。

    示例代码如下:

    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    s = ttk.Style()
    s.configure("1.TFrame",background='red')
    frame = ttk.Frame(root,style="1.TFrame",padding=(5,10,15,20)) # 左上右下的距离
    btn = ttk.Button(frame,text="一个按钮")
    btn.grid(column=0,row=0)
    frame.grid(column=0,row=0)
    
    root.mainloop()
    

    执行结果如下图:

    ttk.Frame的padding参数

    图中,按钮左侧、上侧、右侧和下侧的距离分别是 5、10、15、20。

    如果以上代码换成

    frame = ttk.Frame(root,style="1.TFrame",padding=5) # 四周
    

    表示按钮四周距离都是5。

    如果换成

    frame = ttk.Frame(root,style="1.TFrame",padding=(5,10))
    

    表示按钮左右距离是5,上下距离是10。

    padding 参数值是一个数字,表示四周距离;如果是两个数字的元组,分别表示左右和上下。

    ttk.Frame 样式和边框

    Button 一样,Frame 也有边框样式,以下代码演示了如何设置 Frame 的样式。

    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    s = ttk.Style()
    s.configure("1.TFrame",background='white',borderwidth=2,relief=SUNKEN)
    frame = ttk.Frame(root,style="1.TFrame",padding=(5,10,15,20))
    btn = ttk.Button(frame,text="一个按钮")
    btn.grid(column=0,row=0)
    frame.grid(column=0,row=0)
    
    root.mainloop()
    

    代码执行结果:

    ttk.Frame的样式和边框

    如果把 s=ttk.Style() 放在 root=Tk() 上方,会有奇怪的事情发生哦,不要这样做!!

    ttk.Frame 占用整个窗口

    上篇介绍 grid 布局时,遗留下了一个问题,如何让控件占据整个窗口,即使窗口被拖拽,也能及时填充呢?

    答案是使用 rowconfingurecolumnconfiguresticky 参数相结合。

    示例代码如下:

    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    s = ttk.Style()
    s.configure("1.TFrame",background='red')
    frame = ttk.Frame(root,style="1.TFrame",width=10,height=50)
    frame.grid(column=0,row=0,sticky=(N,E,W,S))
    root.rowconfigure(0,weight=1)
    root.columnconfigure(0,weight=1)
    
    root.mainloop()
    

    代码执行结果:

    ttk.Frame填充整个窗口

    拖拽窗口,使之变大后:

    ttk.Frame填充整个窗口

    可见,Frame 已经完全填充了 root 窗口。

    后继代码,我们的控件都会放置在 Frame 中,而不是直接放置在 root 窗口中,这样更符合实际开发习惯(更有利于风格控制)。

    《tkinter实用教程一》Linux 环境下安装tkinter

    《tkinter实用教程二》tkinter 子模块 ttk

    《tkinter实用教程三》tkinter Button 控件

    《tkinter实用教程四》tkinter 布局管理 Grid

    《tkinter实用教程五》tkinter ttk.Frame控件

    我的个人博客 Ahoh(www.ahoh.club),找我一起玩耍吧!!
  • 相关阅读:
    堆和栈 的区别
    equals == 区别
    【知识点】Filter、Servlet、Listener区别与联系
    白盒测试相关的一些知识
    紧急情况下压缩了测试周期应该怎么办?
    软件性能测试与可靠性测试
    软件测试概念
    web测试方法总结
    结对测试探讨
    八种状态增加测试用例状态的精确度
  • 原文地址:https://www.cnblogs.com/weidawang/p/15429235.html
Copyright © 2011-2022 走看看