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中的wx.ColourDialog类,用于在GUI程序中实现颜色选择功能。用户可以从中选取基础颜色,自定义颜色,并通过wx.ColourData对象获取和设置颜色信息。文章还展示了如何在实际应用中使用wx.ColourDialog对话框来改变文本颜色,并提到了wx.GetColourFromUser全局函数作为另一种颜色选择方式。
1115

被折叠的 条评论
为什么被折叠?



