4.0 KiB
4.0 KiB
wxPython:重置背景颜色
原文:https://www.blog.pythonlibrary.org/2009/09/03/wxpython-resetting-the-background-color/
在过去的几周里,我看到很多人询问关于将一个小部件的颜色重新设置回它最初的“默认”颜色。在 wxPython 的邮件列表中至少有一个人和另外一个人在他们的 IRC 频道上请求关于这个话题的信息。当我第一次查找这个问题时,是为了列表中的一位程序员,他想重置面板的背景颜色。在我的寻找中,我认为我找到了完美的解决方案:
color = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BACKGROUND)
panel.SetBackgroundColour(color)
不幸的是,这并不适用于所有情况。相反,罗宾·邓恩推荐使用 wx。取而代之的是 NullColor(你可以在这里读取完整线程)。按照邓恩先生的说法,原因是*(wx。NullColor)将告诉 wx 小部件没有特定的颜色集,因此它将使用平台想要使用的任何颜色,这可能由活动主题控制,可能根本不是纯色。这与使用系统设置颜色有一点不同,因为 wx 会像设置了一个自定义颜色一样工作,它不在乎它是否与系统颜色相同。*
因此,我创建了一个演示应用程序,向您展示如何重置颜色:
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY,
"Background Reset Tutorial")
# Add a panel so it looks the correct on all platforms
self.panel = wx.Panel(self, wx.ID_ANY)
self.txt = wx.TextCtrl(self.panel)
self.txt.SetBackgroundColour("Yellow")
blueBtn = wx.Button(self.panel,
label="Change Background Color")
blueBtn.Bind(wx.EVT_BUTTON, self.onChangeBackground)
resetBtn = wx.Button(self.panel, label="Reset")
resetBtn.Bind(wx.EVT_BUTTON, self.onReset)
topSizer = wx.BoxSizer(wx.VERTICAL)
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
btnSizer.Add(blueBtn, 0, wx.ALL|wx.CENTER, 5)
btnSizer.Add(resetBtn, 0, wx.ALL|wx.CENTER, 5)
topSizer.Add(self.txt, 0, wx.ALL, 5)
topSizer.Add(btnSizer, 0, wx.CENTER)
self.panel.SetSizer(topSizer)
def onChangeBackground(self, event):
"""
Change the background color of the panel
"""
self.panel.SetBackgroundColour("Blue")
self.panel.Refresh()
def onReset(self, event):
"""
Reset the color of the panel to the default color
"""
self.panel.SetBackgroundColour(wx.NullColor)
self.txt.SetBackgroundColour(wx.NullColor)
self.panel.Refresh()
# Run the program
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyForm()
frame.Show()
app.MainLoop()
在这段代码中,您会注意到我将文本控件的初始背景颜色设置为黄色,并且允许用户通过按钮事件处理程序更改面板的背景。用户也可以通过按下“重置”按钮来“重置”两个窗口小部件的背景颜色。
这是一张使用前和使用后的图片:
重置前
复位后
真的没什么好说的了。现在你也知道诀窍了,所以如果你看到一个新手在这方面挣扎,你也可以告诉他们该怎么做!
此代码在以下位置进行了测试:
- Windows XP、wxPython 2.8.10.1(MSW-unicode)、Python 2.5.2
下载量

