python tkinter自定义实现Expander控件

 更新时间:2023年08月16日 08:42:58   作者:微小冷  
和其他成熟的GUI库相比,tkinter的组件并不是太多,但在自定义组件这一点上,并不逊色于其他框架,下面小编就教大家如何自定义一个Expander控件吧

和其他成熟的GUI库相比,tkinter的组件并不是太多,但在自定义组件这一点上,并不逊色于其他框架,接下来就自定义一个Expander控件。

继承Frame

Expander控件说穿了也很简单,就是一个长条形的按钮,按钮下装着一个普通的Frame就可以。为了实现这个功能,新建一个Frame的子类,像下面这样

import tkinter as tk
import tkinter.ttk as ttk
class Expander(ttk.Frame):
    def __init__(self, master, title, **options):
        super().__init__(master, **options)
        self.pack()
        self.initWidgets(title)
    def initWidgets(self, title):
        self.btn = ttk.Button(self, text=title, command=self.Click)
        self.btn.pack(side=tk.TOP, fill=tk.X, expand=tk.YES)
        self.content = ttk.Frame(self)
        self.content.pack(side=tk.TOP, fill=tk.BOTH, expand=tk.YES)
    def Click(self):
        pass

其中,initWidgets用于初始化控件,上面是一个长条形的按钮,下面是一个Frame,用于添加新组件。Click是点击按钮时的响应函数,目前还没有完成。

下面稍微演示一下

root = tk.Tk()
ex = Expander(root, "expander")
ex.pack(side=tk.TOP, fill=tk.BOTH, expand=tk.YES)
root.mainloop()

效果如下

点击事件

接下来就实现Expander的核心功能,点击按钮改变内容的可见情况。众所周知,在tkinter中,可以通过pack来把某个控件塞到父控件里。那么如果想把这个控件隐藏,只要将其从父控件中拿出来就可以了,用到的函数是pack_forget,非常形象。

而内容Frame的显隐,则需要一个标记,记作self.collapsed,那么Click函数可以写为

def Click(self):
    if self.collapsed:
        self.content.pack(side=tk.TOP, fill=tk.BOTH, expand=tk.YES)            
    else:
        self.content.pack_forget()
    self.collapsed = not self.collapsed

即如果已经折叠了,那就打开content,否则就关闭。然后折叠标记取反。

由于新增了一个全局变量self.collapsed,故而需要修改initWidgets函数

def initWidgets(self, title):
    self.btn = ttk.Button(self, text=title, command=self.Click)
    self.btn.pack(side=tk.TOP, fill=tk.X, expand=tk.YES)
    self.content = ttk.Frame(self)
    self.collapsed = True
    self.Click()

至此,理论上就实现了一个Expander,下面演示一下

root = tk.Tk()
ex = Expander(root, "expander")
ex.pack(side=tk.TOP, fill=tk.X)
tk.Label(ex.content, text="Label").pack(side=tk.TOP, fill=tk.BOTH, expand=tk.YES)
root.mainloop()

需要注意的是,tk.Label的父控件并不是ex,而是ex.content。效果如下

Add函数

ex.content毕竟是内部变量,给暴露出去并不太好,所以最好构造一个Add函数,用来添加新控件,这种东西对于函数式编程来说可谓手到擒来

def Add(self, Child, **options):
    return Child(self.content, **options)

然后测试函数可写为

root = tk.Tk()
ex = Expander(root, "expander")
ex.pack(side=tk.TOP, fill=tk.X)
L = ex.Add(tk.Label, text="Label")
L.pack(side=tk.TOP, fill=tk.BOTH, expand=tk.YES)
root.mainloop()

到此这篇关于python tkinter自定义实现Expander控件的文章就介绍到这了,更多相关tkinter自定义Expander控件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python+Turtle制作独特的表白图

    Python+Turtle制作独特的表白图

    这篇文章主要利用Python和Turtle库绘制独特的表白图,文中的示例代码讲解详细,对我们学习Python有一定的帮助,感兴趣的可以了解一下
    2022-04-04
  • python计算数字或者数组的阶乘的实现

    python计算数字或者数组的阶乘的实现

    本文主要介绍了python计算数字或者数组的阶乘,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • python显示生日是星期几的方法

    python显示生日是星期几的方法

    这篇文章主要介绍了python显示生日是星期几的方法,涉及Python使用date模块操作日期的技巧,需要的朋友可以参考下
    2015-05-05
  • Python办公自动化之数据可视化与报表生成

    Python办公自动化之数据可视化与报表生成

    在现代办公环境中,数据处理和报表生成是一项重要的任务,本文将高效介绍如何使用Python进行数据可视化和报表生成,让您的办公工作更加顺利
    2023-07-07
  • Python三元表达式的基本用法详解

    Python三元表达式的基本用法详解

    Python的三元表达式是一种紧凑、简洁的条件表达式,允许在一行代码中根据条件选择不同的值,三元表达式通常用于需要在单行中根据条件进行值选择的情况,有助于提高代码的可读性和简洁性,本文给大家介绍了Python三元表达式的基本用法,需要的朋友可以参考下
    2023-10-10
  • 详解Python中对Excel的处理操作

    详解Python中对Excel的处理操作

    Excel是一种常见的电子表格文件格式,广泛用于数据记录和处理,Python提供了多个第三方库,可以方便地对Excel操作,下面就来和大家详细讲讲吧
    2023-07-07
  • python使用数字与字符串方法技巧

    python使用数字与字符串方法技巧

    这篇文章主要介绍了python使用数字与字符串方法技巧,文章内容介绍详细具有一的参考价值,需要的小伙伴可以参考一下
    2022-03-03
  • Django利用cookie保存用户登录信息的简单实现方法

    Django利用cookie保存用户登录信息的简单实现方法

    这篇文章主要介绍了Django利用cookie保存用户登录信息的简单实现方法,结合实例形式分析了Django框架使用cookie保存用户信息的相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • Python爬虫自动化爬取b站实时弹幕实例方法

    Python爬虫自动化爬取b站实时弹幕实例方法

    在本篇文章里小编给大家整理的是一篇关于Python爬虫自动化爬取b站实时弹幕实例方法,有兴趣的朋友们可以学习下。
    2021-01-01
  • Python如何查看两个数据库的同名表的字段名差异

    Python如何查看两个数据库的同名表的字段名差异

    这篇文章主要介绍了Python如何查看两个数据库的同名表的字段名差异,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论