实战wxPython:019 - 颜色选择对话框ColourDialog

本文介绍了wxPython中的wx.ColourDialog类,用于在GUI程序中实现颜色选择功能。用户可以从中选取基础颜色,自定义颜色,并通过wx.ColourData对象获取和设置颜色信息。文章还展示了如何在实际应用中使用wx.ColourDialog对话框来改变文本颜色,并提到了wx.GetColourFromUser全局函数作为另一种颜色选择方式。
部署运行你感兴趣的模型镜像

wx.ColourDialog是wxPython内建的标准通用对话框之一。当我们的GUI程序需要交互设置应用程序中某个控件的颜色时,则可以使用wx.ColourDialog来对颜色进行选择设置。

一、wx.ColourDialog简介

颜色选择对话框类wx.ColourDialog提供了以下一些基本的颜色选择功能:

  • 从基础颜色中选择选择需要的颜色;
  • 从色谱图中选择所需的颜色;
  • 将喜欢的颜色添加到常用颜色中(在不同系统中,该功能可能缺失);
  • 微调三原色数值。

wx.ColourDialog常用方法有:

  • GetColourData(self): 返回与颜色选择对话框相关的颜色数据。
  • ShowModal(self): 显示对话框,如果点击了wx.OK按钮则返回wx.ID_OK,否则返回wx.ID_CANCEL。

说明: 从wxWidgets3.1.3开始(目前仅支持Windows), 颜色选择对话框在显示时将生成wx.EVT_COLOUR_CHANGED事件,就是说它可以从ShowModal方法中, 通知当前所做的颜色改变,通过这个事件,绑定方法,就可以预览选择此颜色的效果。

 图1:wx.ColourDialog类继承关系

二、wx.ColourData

wx.ColourData保存wx.ColourDialog的各种信息,它的常用方法有:

  • FromString(self, str):解码给定的字符串,该字符串应该与wx.ToString返回的格式相同,并设置内部颜色。
  • GetChooseAlpha(self):获取颜色对话框是否显示alpha值和不透明度选择器。
  • GetChooseFull(self):在Windows下,确定Windows颜色对话框是否将显示带有自定义颜色选择控件的完整对话框。在其他平台上该设置无意义,缺省值为True。
  • GetColour(self):返回颜色对话框当前所选择的颜色,缺省颜色为黑色。
  • GetCustomColour(self, i):返回颜色对话框中自定义颜色,参数i 为0到15之间的整数,是用户保存的15种自定义颜色中的任意一种。默认的自定义颜色是无效颜色。
  • SetChooseAlpha(self, flag):设置颜色对话框是否显示alpha值和不透明度选择器(滑块)。
  • SetChooseFull(self, flag):在Windows下,设置颜色对话框是否显示带有自定义颜色选择控件的完整对话框。在其他平台上该设置无意义,缺省值为True。
  • SetColour(self, colour):设置颜色选择对话框的缺省颜色,缺省值为黑色。
  • SetCustomColour(self, i, colour):设置颜色选择对话框中的自定义颜色,参数i 为0到15之间的整数,为想要设置自定义颜色的索引位置,默认的自定义颜色是无效颜色。colour为想要设置的颜色
  • ToString(self):将保存在类中的颜色转换为字符串形式,用逗号分隔各种颜色值。

三、wx.ColourDialog示例

下面的代码演示如何使用wx.ColourDialog:

#颜色选择对话框(ColourDialog)

import wx

class SampleColourDialog(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleColourDialog, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #设置标题
        self.SetTitle("实战wxPython: 颜色选择对话框")
        #设置窗口尺寸
        self.SetSize(480, 360)

        vSizer = wx.BoxSizer(wx.VERTICAL)

        btnTest = wx.Button(self, -1, "调整颜色")
        btnTest.Bind(wx.EVT_BUTTON, self.OnSetFontColour)

        self.label_text = wx.StaticText(self, -1, style=wx.TE_MULTILINE, size = (-1, 300))
        self.label_text.SetLabel("实战wxPython: \n测试wx.ColorDialog")
        self.label_text.SetFont(wx.Font(wx.FontInfo(20)))
        
        vSizer.Add(btnTest, wx.ID_ANY, wx.EXPAND|wx.ALIGN_TOP)
        vSizer.Add(self.label_text, wx.ID_ANY, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 40)

        self.SetSizer(vSizer)

        self.Centre()

    def OnSetFontColour(self, e):
        dlg = wx.ColourDialog(self)
        dlg.GetColourData().SetChooseFull(True)
        if dlg.ShowModal() == wx.ID_OK:
            new_color = dlg.GetColourData().GetColour().Get()
            self.label_text.SetForegroundColour(new_color)
            #刷新,否则字体颜色不更新
            self.Refresh()
        dlg.Destroy()

def main():
    app = wx.App()
    sample = SampleColourDialog(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

运行上面的代码,在Windows系统下,其界面如图2:

 图2:wx.ColourDialog对话框演示

当我们点击”调整颜色”按钮后,将弹出颜色选择对话框, 如图3所示:

 图3:颜色选择对话框

在颜色选择对话框上,选择我们需要的颜色,在图3中, 颜色(R,G,B)=(87,43,82),然后点击”确定按钮”,退出颜色选择对话框,回到主窗口,效果如图4:

 图4:修改字体颜色演示

可以看到,字体的颜色不再是原始的黑色,而是修改成了我们刚才从颜色选择对话框中选择的颜色。

当我们点击颜色选择对话框的”确定”按钮后,wx.ColourDialog对话框的ShowModal方法返回wx.ID_OK,执行下面的语句:

new_color = dlg.GetColourData().GetColour().Get()

获取从颜色选择器中选择的颜色

self.label_text.SetForegroundColour(new_color)

然后设置文本颜色

self.Refresh()

通知刷新,字体以新的颜色重绘。

四、wx.GetColourFromUser

调用wx.GetColourFromUser全局方法,可以弹出一个颜色选择对话框,该方法原型为:

wx.GetColourFromUser(parent, colInit, caption,data)

参数:

parent:父窗口

colInit:初始颜色

caption:窗口标题, 默认EmptyString

data:wx.ColourData颜色数据,默认None

调用方法:

colour = wx.GetColourFromUser(self, wx.NullColour)

打开一个颜色选择对话框,并在窗口关闭时,返回选择的wx.Colour类型颜色值。

五、本文知识点

  • 了解颜色选择对话框wx.ColourDialog。
  • 了解wx.ColourData。
  • 使用颜色选择对话框选择一个颜色来修改文字的颜色。
  • 调用wx.GetColourFromUser全局方法。

前一篇:实战wxPython:018 - 文件夹选择对话框DirDialog

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值