跳转到主要内容

Pythonic自然颜色和色调编辑器

项目描述

欢迎使用PYnche

这是一个Pythonic的NaturalColor和HueEditor。

Pynche主要基于多年前我为SunView窗口系统编写的类似颜色编辑器。那个编辑器被称为ICE:交互式颜色编辑器。我一直想将编辑器移植到X上,但不想 hacking X和C代码来做这件事。快进许多年,到Python + Tkinter提供了一个如此好的编程环境,具有足够的力量,我最终下定决心实现了它。我更改了名称,因为太多其他系统有“ICE”这个首字母缩略词。

联系

现代战士

截至Python 3.11,pyNche终于从CPython存储库中删除并移动到自己的存储库。鉴于CPython中的代码甚至与Python 3不兼容,这已是久拖未决的事情。

我不打算过多支持它,但我会让它继续工作(在你的帮助下!)并且它仍然是一个很好的使用Python的tkinter的演示,所以我想这里就是了。欢迎贡献和合作!

我已经将此最小化地移植到Python 3。在macOS(我测试的地方),你需要运行brew install python-tk才能让它工作。

要运行它:python3 src/pynche

除此之外,如果你想要参与,请随时联系。

简介

Pynche是一个基于我在1987年为SunView窗口系统最初编写的类似程序的彩色编辑器。那个编辑器被称为ICE,即交互式彩色编辑器。我一直想把这个程序移植到X上,但不想修改X和C代码来做这件事。很多年后,Python + Tkinter提供了一个如此好的编程环境,功能足够强大,我终于下定决心重新实现了它。我更改了名称,因为现在太多其他系统也有“ICE”这个缩写。

Pynche应该可以与任何Python 3变体一起工作,但只在macOS上测试过,使用了brew安装的Python 3.9和TclTk 8.6.12(通过python-tk),因为源代码与CPython仓库分离。

Pynche必须找到一个颜色名称的文本数据库,以便提供最近的颜色匹配。出于这个原因,Pynche附带了一个来自X11R6.4分发的rgb.txt文件,以及其他的“网络相关”数据库(见下文)。你可以使用带有-d选项的不同文件。文件xlicense.txt只包含rgb.txt的许可。

Pynche的发音:Pin'-chee

独立运行

在Unix上,通过运行pynche脚本启动它。在Windows上,运行pynche.pyw以抑制控制台窗口。在命令行运行时,以下选项被识别

--database file -d file 颜色数据库文件的替代位置。没有此选项,将使用找到的第一个有效文件(见下文)。

--initfile file -i file 持久初始化文件的替代位置。请参阅下面的持久性部分。

--ignore -X 启动时忽略持久初始化文件。当Pynche退出时,它仍会将当前选项设置写入持久初始化文件。

--help -h 打印帮助信息。

initialcolor 要用作初始选中颜色的Tk颜色名称或#rrggbb颜色规范。这将覆盖持久初始化文件中保存的任何颜色。由于#需要在许多shell中转义,因此规范中的#是可选的(例如,#45dd1f与45dd1f相同)。

作为模态对话框运行

警告:自CPython仓库分离以来,尚未测试过此模式。这里的所有信息都非常古老。

Pynche可以作为模态对话框在另一个应用程序中运行,例如作为通用颜色选择器。实际上,Grail 0.6使用Pynche,IDLE的未来版本也可能如此。Pynche支持Tkinter标准tkColorChooser模块实现的API,以下有一些修改。通过从Pynche包导入pyColorChooser,你可以运行

pyColorChooser.askcolor()

这将弹出Pynche作为模态对话框,并返回所选颜色。

在作为模态运行与独立运行时,有一些UI差异。在作为模态运行时,在“文件”菜单下没有“退出”菜单项。相反,有“确定”和“取消”按钮。

当点击“确定”时,askcolor()返回元组

((r, g, b), "name")

其中 rgb 分别代表红色、绿色和蓝色颜色值(范围在 0 到 255 之间)。"name" 将是一个颜色数据库中的颜色名称,如果存在精确匹配,否则它将是一个形式为 "#rrggbb" 的 X11 颜色规范。请注意,这与 tkColorChooser 不同,因为它不知道任何颜色名称。

askcolor() 支持以下可选关键字参数

color 要设置为初始选定颜色的颜色

master[*] 要用作模式对话框父窗口的主窗口。如果没有这个参数,pyColorChooser 将创建自己的 Tkinter.Tk 实例作为主窗口。这可能不是您想要的。

databasefile--database 选项类似,值必须是文件名

initfile[*]--initfile 选项类似,值必须是文件名

ignore[*]--ignore 标志类似,值是一个布尔值

wantspec 当此值为真时,返回元组的 "name" 字段将始终是形式为 "#rrggbb" 的颜色规范。即使存在匹配,也不会返回颜色名称;这样 pyColorChooser 可以精确匹配 tkColorChooser 的 API。

[*] 这些参数必须在第一次使用 askcolor() 时指定,并且在后续调用中不能更改。

颜色条窗口

The ColorStrip Window

主 Pynche 窗口的顶部包含“颜色变化条带”。每个条带有一定数量的“颜色芯片”。条带始终通过围绕选定颜色芯片的突出矩形和指向芯片的箭头来指示当前选定的颜色。每个箭头都有一个相关的数字,表示沿变化轴的颜色值。每个变化条带都会向您展示通过仅改变颜色体的一个轴来从选定颜色可到达的颜色。

例如,当选定颜色为(以红/绿/蓝表示法)127/127/127 时,红色变化条带会向您展示 0/127/127 到 255/127/127 范围内的每种颜色。绿色和蓝色轴类似。您可以通过单击其芯片来选择任何颜色。这将更新突出矩形和箭头,以及 Pynche 中的其他显示。

如果您想在拖动任何变化条带时更新选定的颜色,请单击“拖动时更新”。如果您想以十六进制显示箭头数字,请单击“十六进制”。

此窗口中还有两个快捷按钮,可自动选择黑色(0/0/0)和白色(255/255/255)。

校对窗口

The Proof Window

在主窗口的左下角,您可以看到两个较大的颜色芯片。选定的芯片显示了在变化条带中选定的颜色的大版本,以及它的 X11 颜色规范。最近的芯片显示了与选定颜色最接近的 X11 数据库中的颜色,并给出了其 X11 颜色规范,下面是它的 X11 颜色名称。当选定芯片颜色与最近芯片颜色完全匹配时,您将在选定芯片的颜色规范下方看到颜色名称。

单击最近的颜色芯片选择该颜色。颜色距离是在 RGB 颜色体的 3D 空间中计算的,如果多个颜色名称与选定颜色的距离相同,则选择找到的第一个。

请注意,对于相同的 RGB 值可能有多个 X11 颜色名称。在这种情况下,文本数据库中找到的第一个被指定为“主要”名称,并显示在最近芯片下方。其他名称是“别名”,它们在颜色列表窗口(见下文)中可见。

颜色规范和颜色名称都可选中以复制和粘贴到另一个窗口。

输入窗口

The Type-in Window

在主窗口的左下角有三个输入字段。在这里,您可以输入三个颜色轴的数值。有效值介于0和255之间,这些字段不允许您输入非法值。您必须按Enter或Tab键来选择新的颜色。

如果您想Pynche在每次按键时(嗯,每个产生合法值的按键!)选择颜色,请点击“边打边更新”。点击“十六进制”以显示和输入十六进制颜色值。

其他视图

默认情况下,有三个次要窗口不会显示。您可以通过主Pynche窗口的“视图”菜单来调用这些窗口。

文本窗口

The Text Window

“文本窗口”允许您查看各种颜色对标准Tk文本小部件元素的影响。在窗口的上部是一个普通的Tk文本小部件,您可以在其中编辑文本、选择文本区域等。下面是“跟踪颜色变化”按钮。当此按钮开启时,在其他窗口中选择的任何颜色将更改下面的单选按钮指定的文本小部件元素。当此按钮关闭时,文本小部件元素不受颜色选择的影响。

您可以通过点击此窗口底部的一部分中的一个单选按钮来选择颜色选择更改哪个元素。文本前景和背景影响窗口上部的文本。选择前景和背景影响主要选择的前景和背景颜色,这是您在点击中间按钮(取决于窗口系统)并拖动它通过一些文本时看到的。

插入是指文本窗口中的插入光标,在您键入时,新文本将插入到光标位置。插入光标只有背景。

颜色列表窗口

The Color List Window

“颜色列表”窗口显示了颜色名称数据库中的每个命名颜色。在窗口的上部,您可以看到按字母顺序排列的数据库中所有颜色名称的滚动列表。点击任何颜色进行选择。在窗口的底部显示了所选颜色的任何别名(那些具有相同RGB值但后来在文本数据库中找到的颜色名称)。例如,找到颜色“黑色”,您将看到其别名为“gray0”和“grey0”。

如果颜色没有别名,您将在这里看到“<no aliases>”。如果您只想查看颜色是否有别名,而不想在点击时选择颜色,请关闭“点击更新”。

请注意,当从主窗口中选择颜色时,颜色列表总是会更新。无法关闭此功能。如果所选颜色没有匹配的颜色名称,您将在别名窗口中看到“<no matching color>”。

详细信息窗口

The Details Window

“详细信息”窗口比仅点击主窗口中的颜色芯片提供了更多对颜色选择的控制。顶部的一排按钮将指定的增量或减量应用到所选颜色。这些增量应用到由标记有“移动滑块”的复选框指定的颜色条。因此,如果仅选择红色和绿色,按-10将只从红色和绿色的变化值中减去10。注意复选框下的消息;这表明当多个滑块绑定在一起时,正在更改的主颜色级别。例如,如果选择了红色和绿色,您将更改所选颜色的黄色级别。

“在边界”行为决定了当点击顶部按钮时,任何颜色变化达到下限或上限(0或255)时会发生什么

停止 当增量或减量操作会使任何关联的变体超出范围时,整个增量值将被丢弃。

循环 当增量或减量操作会使任何关联的变体超出范围时,超出范围的值将循环到另一侧。因此,如果红色位于238,并点击了+25,红色将变为7。

保持距离 当增量或减量操作会使任何关联的变体超出范围时,所有关联的变体作为一个整体循环,以保持它们之间的距离。因此,如果绿色和蓝色关联,绿色在238而蓝色在223,并点击了+25,绿色将变为15而蓝色将变为0。

压缩 当增量或减量操作会使任何关联的变体超出范围时,超出范围的变体将被设置为255的 ceiling 或0的 floor,根据情况而定。这样,所有关联的变体都被压缩到一边或另一边。

顶部行按钮具有以下键盘快捷键

-25 == Shift 左箭头 -10 == Control 左箭头 -1 == 左箭头 +1 == 右箭头 +10 == Control 右箭头

键盘快捷键

Alt-w 在任何辅助窗口中关闭窗口。在主窗口中,它将退出 Pynche(除非以模态方式运行)。

Alt-q 在任何窗口中退出 Pynche(除非以模态方式运行)。

持久性

Pynche 记录选项和颜色设置的各个设置,在持久初始化文件中存储这些值。此文件的实际位置由 --initfile 选项指定(见上文),默认为 ~/.pynche

当 Pynche 退出时,它将在初始化文件中保存这些值,并在启动时重新读取它们。此文件没有锁定,因此如果您同时运行多个 Pynche 实例,可能会覆盖初始化文件。

实际存储的选项包括

  • 当前选中的颜色

  • 所有窗口中复选框和单选按钮选项的所有设置

  • 文本窗口的内容,当前文本选择和插入点,以及所有当前文本小部件元素的颜色设置。

  • 颜色数据库文件的名称(但不是其内容)

您可以通过在命令行上提供 --ignore 选项来阻止 Pynche 读取初始化文件。但是,您无法在 Pynche 退出时抑制在初始化文件中存储设置。如果您真的想这样做,请使用 /dev/null 作为初始化文件,使用 --initfile

颜色名称数据库文件

Pynche 使用颜色名称数据库文件来计算所选颜色的最近颜色,并在颜色列表视图中显示。Pynche 随附了几个文件,下面将描述。默认情况下,选择 X11 颜色名称数据库文件。其他文件

html40colors.txt -- HTML 4.0 保证的颜色名称

websafe.txt -- Netscape 和 MSIE 保证不会进行抖动的216种“Web安全”颜色。这些颜色以 #rrggbb 格式指定了值和名称

webcolors.txt -- Tim Peters 和他的妹妹说 NS 和 MSIE 都理解的140种颜色(关于 AliceBlue 有一些争议)。

namedcolors.txt -- Netscape 颜色的一组替代方案。

您可以通过从“文件”菜单中选择“加载调色板...”来在文件之间切换。这将打开一个标准的 Tk 文件对话框。选择您想要的文件,然后点击“确定”。如果 Pynche 理解此文件中的格式,它将加载数据库并更新相应的窗口。如果不理解,它将打开一个错误对话框。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

pynche-2.0a1.tar.gz (43.9 kB 查看哈希值)

上传时间

构建分布

pynche-2.0a1-py3-none-any.whl (43.0 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面