📄 setup.py
字号:
p = wx.StaticText(self, label="Foreground:")
sizer.Add(p, pos=(0, 0), flag=wx.ALIGN_CENTRE_VERTICAL)
p = self.fg = csel.ColourSelect(self)
sizer.Add(p, pos=(0, 1), span=(1, 3), flag=wx.ALIGN_CENTRE_VERTICAL)
p = wx.StaticText(self, label="Background:")
sizer.Add(p, pos=(1, 0), flag=wx.ALIGN_CENTRE_VERTICAL)
p = self.bg = csel.ColourSelect(self)
sizer.Add(p, pos=(1, 1), span=(1, 3), flag=wx.ALIGN_CENTRE_VERTICAL)
p = wx.StaticText(self, label="Style:")
sizer.Add(p, pos=(2, 0), flag=wx.ALIGN_CENTRE_VERTICAL)
p = self.ws = wx.Choice(self, choices=_window_styles)
sizer.Add(p, pos=(2, 1), span=(1, 3), flag=wx.ALIGN_CENTRE_VERTICAL)
box.Add(sizer)
self.SetSizer(box)
#----------------------------------------------------------------------
class _PageBase(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.clock = self.GetGrandParent().GetParent()
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(self.sizer)
def UpdateControls(self):
[group.UpdateControls() for group in self.GetChildren()]
#----------------------------------------------------------------------
class StylesPanel(bt.ButtonTreeCtrlPanel):
def __init__(self, parent):
bt.ButtonTreeCtrlPanel.__init__(self, parent)
self.clock = self.GetGrandParent().GetParent()
root = self.AddItem("Styles")
g1 = self.AddItem("General", parent=root)
g2 = self.AddItem("Hours", parent=root)
g3 = self.AddItem("Minutes", parent=root)
self.groups = [g1, g2, g3]
clockStyle = self.clock.GetClockStyle()
hourStyle, minuteStyle = self.clock.GetTickStyle()
for label in dir(styles):
if label.startswith("TICKS_"):
value = bool(getattr(styles, label) & hourStyle)
self.AddItem(label, parent=g2, style=wx.RB_SINGLE, value=value)
value = bool(getattr(styles, label) & minuteStyle)
self.AddItem(label, parent=g3, style=wx.RB_SINGLE, value=value)
elif not (label.startswith("DEFAULT_") or \
label.startswith("_") or \
label in ["HOUR", "MINUTE", "SECOND", "ALL"]):
value = bool(getattr(styles, label) & clockStyle)
self.AddItem(label, parent=g1, style=wx.CHK_2STATE, value=value)
self.EnsureFirstVisible()
self.Bind(bt.EVT_CHANGED, self.OnChanged)
def OnChanged(self, evt):
clockStyle, hourStyle, minuteStyle = \
[reduce(lambda x, y: x | y,
[getattr(styles, item) \
for item in self.GetStringItemsChecked(group)], 0) \
for group in self.groups]
self.clock.SetClockStyle(clockStyle)
self.clock.SetTickStyle(hourStyle, styles.HOUR)
self.clock.SetTickStyle(minuteStyle, styles.MINUTE)
def UpdateControls(self):
clockStyle = self.clock.GetClockStyle()
hourStyle, minuteStyle = self.clock.GetTickStyle()
[g1, g2, g3] = self.groups
for label in dir(styles):
if label.startswith("TICKS_"):
item = self.GetItemByLabel(label, g2)
value = bool(getattr(styles, label) & hourStyle)
self.SetItemValue(item, value)
item = self.GetItemByLabel(label, g3)
value = bool(getattr(styles, label) & minuteStyle)
self.SetItemValue(item, value)
elif not (label.startswith("DEFAULT_") or \
label.startswith("_") or \
label in ["HOUR", "MINUTE", "SECOND", "ALL"]):
item = self.GetItemByLabel(label, g1)
value = bool(getattr(styles, label) & clockStyle)
self.SetItemValue(item, value)
#----------------------------------------------------------------------
class HandsPanel(_PageBase):
def __init__(self, parent):
_PageBase.__init__(self, parent)
[self.sizer.Add(_Group_1(self, title), 1,
flag=wx.EXPAND|wx.ALL, border=6) \
for title in ["Hours", "Minutes", "Seconds"]]
#----------------------------------------------------------------------
class TicksPanel(_PageBase):
def __init__(self, parent):
_PageBase.__init__(self, parent)
[self.sizer.Add(_Group_2(self, title), 1,
flag=wx.EXPAND|wx.ALL, border=6) \
for title in ["Hours", "Minutes"]]
#----------------------------------------------------------------------
class MiscPanel(_PageBase):
def __init__(self, parent):
_PageBase.__init__(self, parent)
self.sizer.Add(_Group_3(self, "Face"), 1,
flag=wx.EXPAND|wx.ALL, border=6)
self.sizer.Add(_Group_4(self, "Window"), 1,
flag=wx.EXPAND|wx.ALL, border=6)
#----------------------------------------------------------------------
class Setup(wx.Dialog):
"""AnalogClock customization dialog."""
def __init__(self, parent):
wx.Dialog.__init__(self, parent, title="AnalogClock Setup")
sizer = wx.BoxSizer(wx.VERTICAL)
nb = self.nb = wx.Notebook(self)
for s in ["Styles", "Hands", "Ticks", "Misc"]:
page = eval(s + "Panel(nb)"); page.Fit()
nb.AddPage(page, s)
nb.Fit()
sizer.Add(nb, 1, flag = wx.EXPAND|wx.ALL, border=6)
bsizer = wx.BoxSizer(wx.HORIZONTAL)
bsizer.Add(wx.Button(self, label="Reset"),
flag = wx.LEFT|wx.RIGHT, border=6)
bsizer.Add(wx.Button(self, wx.ID_OK),
flag = wx.LEFT|wx.RIGHT, border=6)
sizer.Add(bsizer, 0, flag=wx.ALIGN_RIGHT|wx.ALL, border=6)
self.Bind(wx.EVT_SHOW, self.OnShow)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Bind(wx.EVT_BUTTON, self.OnButton)
self.customcolours = [None] * 16
self.SetSizerAndFit(sizer)
def OnShow(self, evt):
if self.IsShown():
self.UpdateControls()
evt.Skip()
def OnClose(self, evt):
self.Hide()
def OnButton(self, evt):
if evt.GetEventObject().GetLabel() == "Reset":
self.ResetClock()
evt.Skip()
def UpdateControls(self):
wx.BeginBusyCursor()
for i in range(self.nb.GetPageCount()):
self.nb.GetPage(i).UpdateControls()
wx.EndBusyCursor()
def ResetClock(self):
clock = self.GetParent()
wx.BeginBusyCursor()
clock.SetClockStyle(styles.DEFAULT_CLOCK_STYLE)
clock.SetTickStyle(styles.TICKS_POLY, styles.HOUR)
clock.SetTickStyle(styles.TICKS_CIRCLE, styles.MINUTE)
clock.SetTickFont(wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT))
clock.SetHandBorderWidth(0)
clock.SetTickBorderWidth(0)
clock.SetFaceBorderWidth(0)
clock.SetHandSize(7, styles.HOUR)
clock.SetHandSize(5, styles.MINUTE)
clock.SetHandSize(1, styles.SECOND)
clock.SetTickSize(25, styles.HOUR)
clock.SetTickSize(5, styles.MINUTE)
clock.SetTickOffset(0)
clock.SetWindowStyle(wx.NO_BORDER)
sw = wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DSHADOW)
clock.SetShadowColour(sw)
no_color = wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE)
clock.SetFaceFillColour(no_color)
clock.SetFaceBorderColour(no_color)
clock.SetBackgroundColour(no_color)
fg = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
clock.SetForegroundColour(fg)
self.UpdateControls()
wx.EndBusyCursor()
#
#
### eof
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -