美文网首页python学习交流
python 之 enum 定义枚举类

python 之 enum 定义枚举类

作者: 水之心 | 来源:发表于2020-03-25 22:13 被阅读0次

参考:enum --- 对枚举的支持

枚举是一组符号名称(枚举成员)的集合,枚举成员应该是唯一的、不可变的。在枚举中,可以对成员进行恒等比较,并且枚举本身是可迭代的。在 Python 中提供了 enum 模块对枚举进行支持。

此模块定义了四个枚举类,它们可被用来定义名称和值的不重复集合: Enum(用于创建枚举常量), IntEnum(用于创建属于 int 的子类的枚举常量), Flag(用于创建枚举常量 可使用按位运算符进行组合而不会丢失其 Flag 成员资格的枚举常量。)和 IntFlag(用于创建可使用按位运算符进行组合而不会丢失其 IntFlag 成员资格的枚举常量。 IntFlag 成员同样也是 int 的子类。)。 此外还定义了一个装饰器 unique()(可确保只将一个名称绑定到任意一个值) 和一个辅助类 auto(实例会被替换为一个可作为 Enum 成员的适当的值。 初始值从 1 开始。)

直接看实例:

from enum import Enum, auto, unique
from tkinter import Tk, Canvas

@unique
class Atom(Enum):
    rectangle = auto()
    oval = auto()
    arc = auto()
    line = auto
    image = auto()
    text = auto()
    polygon = auto()
    window = auto()
    bitmap = auto()


class GraphAtom(Canvas):
    def __init__(self, master=None, cnf={}, **kw):
        '''The base class of all graphics frames.

        :param master: a widget of tkinter or tkinter.ttk.
        '''
        super().__init__(master, cnf, **kw)
        
    def create(self, graph, *args, **kw):
        '''
        :param graph: Atom 中的元素
        '''
        return eval(f"self.create_{graph.name}")(*args, **kw)

class Graph(GraphAtom):
    def __init__(self, master=None, atom=Atom.rectangle, cnf={}, **kw):
        '''
        :param atom: Atom.line, Atom.oval, Atom.rectangle
        '''
        super().__init__(master, cnf, **kw)
        self.atom = atom
        self.lastx, self.lasty = 0, 0
        self.bind("<Button-1>", self.xy) # 绑定鼠标左键
        self.bind("<ButtonRelease-1>", self.add) # 拖动鼠标左键

    def xy(self, event):
        '''更新坐标'''
        self.lastx, self.lasty = event.x, event.y
        
    def add(self, event):
        self.create(self.atom, self.lastx, self.lasty, event.x, event.y, fill='red', width=3)
        self.xy(event)
    
    def layout(self):
        self.grid(column=0, row=0, sticky='nwes')
        
if __name__ == "__main__":
    root = Tk()
    root.columnconfigure(0, weight=1)
    root.rowconfigure(0, weight=1)
    segment = Graph(root, Atom.rectangle)
    segment.layout()
    root.mainloop()

相关文章

  • python 之 enum 定义枚举类

    参考:enum --- 对枚举的支持。 枚举是一组符号名称(枚举成员)的集合,枚举成员应该是唯一的、不可变的。在枚...

  • 枚举学习

    java enum枚举类 enum(枚举)类介绍 **java枚举类是一组预定义常量的集合,使用enum关键字声明...

  • Python_枚举

    一、枚举 Enum类 Python中所有枚举类型都是enum模块下的Enum类的子类。 枚举中的标识最好全部使用大...

  • Python 枚举类

    Python v3.8.5 如果想将一个类定义为枚举类,只需要令其继承自enum 模块(内置)中的 Enum 类即...

  • 枚举

    如何定义枚举类 什么枚举类:类里的对象是有限个,可以枚举出来 如何使用enum定义枚举类 枚举...

  • Chapter 8 . 枚举

    阅读原文 Chapter 8 . 枚举 8.1 枚举类 主要内容: 如何自定义枚举类 如何使用enum定义枚举类 ...

  • 枚举

    一、概念: 实例有限而且固定的类,在java里被称为枚举类。 二、通过enum实现枚举类 使用enum定义的枚举类...

  • 枚举--java24(02/17/2016)

    如何自定义枚举类如何使用enum定义枚举类、枚举类的主要方法实现接口的枚举类 JDK1.5之前需要自定义枚举类JD...

  • Java篇-枚举的使用

    一 : 自定义枚举类 枚举类调用 二 : 使用enum关键字定义枚举类 让枚举类实现接口: 可以让不同的枚举类的对...

  • Java核心类-枚举类

    Java 进阶——枚举enum使用小结及使用枚举替代你的常量类 通过enum定义的枚举类,和其他的class没有任...

网友评论

    本文标题:python 之 enum 定义枚举类

    本文链接:https://www.haomeiwen.com/subject/ppjfuhtx.html