def checkParam(self, widget, name, value, *, expected=_sentinel,
conv=False, eq=None):
widget[name] = value
if expected is _sentinel:
expected = value
if conv:
expected = conv(expected)
if self._stringify or not self.wantobjects:
if isinstance(expected, tuple):
expected = tkinter._join(expected)
else:
expected = str(expected)
if eq is None:
eq = tcl_obj_eq
self.assertEqual2(widget[name], expected, eq=eq)
self.assertEqual2(widget.cget(name), expected, eq=eq)
# XXX
if not isinstance(widget, Scale):
t = widget.configure(name)
self.assertEqual(len(t), 5)
self.assertEqual2(t[4], expected, eq=eq)
python类Scale()的实例源码
def test_keys(self):
widget = self.create()
keys = widget.keys()
# XXX
if not isinstance(widget, Scale):
self.assertEqual(sorted(keys), sorted(widget.configure()))
for k in keys:
widget[k]
# Test if OPTIONS contains all keys
if test.support.verbose:
aliases = {
'bd': 'borderwidth',
'bg': 'background',
'fg': 'foreground',
'invcmd': 'invalidcommand',
'vcmd': 'validatecommand',
}
keys = set(keys)
expected = set(self.OPTIONS)
for k in sorted(keys - expected):
if not (k in aliases and
aliases[k] in keys and
aliases[k] in expected):
print('%s.OPTIONS doesn\'t contain "%s"' %
(self.__class__.__name__, k))
def checkParam(self, widget, name, value, *, expected=_sentinel,
conv=False, eq=None):
widget[name] = value
if expected is _sentinel:
expected = value
if conv:
expected = conv(expected)
if self._stringify or not self.wantobjects:
if isinstance(expected, tuple):
expected = tkinter._join(expected)
else:
expected = str(expected)
if eq is None:
eq = tcl_obj_eq
self.assertEqual2(widget[name], expected, eq=eq)
self.assertEqual2(widget.cget(name), expected, eq=eq)
# XXX
if not isinstance(widget, Scale):
t = widget.configure(name)
self.assertEqual(len(t), 5)
self.assertEqual2(t[4], expected, eq=eq)
def test_keys(self):
widget = self.create()
keys = widget.keys()
# XXX
if not isinstance(widget, Scale):
self.assertEqual(sorted(keys), sorted(widget.configure()))
for k in keys:
widget[k]
# Test if OPTIONS contains all keys
if test.support.verbose:
aliases = {
'bd': 'borderwidth',
'bg': 'background',
'fg': 'foreground',
'invcmd': 'invalidcommand',
'vcmd': 'validatecommand',
}
keys = set(keys)
expected = set(self.OPTIONS)
for k in sorted(keys - expected):
if not (k in aliases and
aliases[k] in keys and
aliases[k] in expected):
print('%s.OPTIONS doesn\'t contain "%s"' %
(self.__class__.__name__, k))
def _scale(self, from_, to, resolution, variable, position, command = None,
kwargs = {}):
if command is None:
command = lambda s: variable.set(round(float(s), 3))
scale = ttk.Scale(self.frame1.sliders, from_ = from_, to = to, variable = variable,
orient = "horizontal", length = 20, command = command,
takefocus = False, **kwargs)
if position == 1:
scale.place(relwidth = 0.35, relx = 0, x = 0, y = 25, anchor = "nw")
elif position == 2:
scale.place(relwidth = 0.35, relx = 0, x = 0, y = 70, anchor = "nw")
elif position == 3:
scale.place(relwidth = 0.35, relx = 0.5, x = 0, y = 25, anchor = "nw")
elif position == 4:
scale.place(relwidth = 0.35, relx = 0.5, x = 0, y = 70, anchor = "nw")
return scale
def checkParam(self, widget, name, value, *, expected=_sentinel,
conv=False, eq=None):
widget[name] = value
if expected is _sentinel:
expected = value
if conv:
expected = conv(expected)
if self._stringify or not self.wantobjects:
if isinstance(expected, tuple):
expected = tkinter._join(expected)
else:
expected = str(expected)
if eq is None:
eq = tcl_obj_eq
self.assertEqual2(widget[name], expected, eq=eq)
self.assertEqual2(widget.cget(name), expected, eq=eq)
# XXX
if not isinstance(widget, Scale):
t = widget.configure(name)
self.assertEqual(len(t), 5)
self.assertEqual2(t[4], expected, eq=eq)
def checkParam(self, widget, name, value, *, expected=_sentinel,
conv=False, eq=None):
widget[name] = value
if expected is _sentinel:
expected = value
if conv:
expected = conv(expected)
if self._stringify or not self.wantobjects:
if isinstance(expected, tuple):
expected = tkinter._join(expected)
else:
expected = str(expected)
if eq is None:
eq = tcl_obj_eq
self.assertEqual2(widget[name], expected, eq=eq)
self.assertEqual2(widget.cget(name), expected, eq=eq)
# XXX
if not isinstance(widget, Scale):
t = widget.configure(name)
self.assertEqual(len(t), 5)
self.assertEqual2(t[4], expected, eq=eq)
def __init__(self, master, **kw):
super().__init__(master)
# self.grid_propagate(0)
# self.columnconfigure(0, weight=1)
# self.rowconfigure(0, weight=1)
self.var = kw.get('variable', IntVar())
kw['variable'] = self.var
kw['from_'] = ConfidenceLevel.Low.value
kw['to'] = ConfidenceLevel.VeryHigh.value
# kw['command'] = self.scale_change
kw['orient'] = HORIZONTAL
self.lbl_scale = Label(self)
self.scale = Scale(self, **kw)
self.scale_font = tkfont.nametofont(Style().lookup('TLabel', 'font')).copy()
self.scale_font.config(weight=tkfont.BOLD, size=9)
self.lbl_scale.config(font=self.scale_font, width=3, anchor=CENTER)
self.var.trace_variable('w', lambda a, b, c: self.scale_change())
self.scale.grid(row=0, column=0, sticky='ns')
self.lbl_scale.grid(row=0, column=1, sticky='ns', padx=(3, 0))
def create(self, **kwargs):
return ttk.Scale(self.root, **kwargs)
def __init__(self, parent, from_=0, to=0, *args):
ttk.Scale.__init__(self, parent, command=self._round, from_=from_, to=to, *args)
self.parent = parent
self._from = from_
self._to = to
self._value = self.get()
def _round(self, *args):
"""Rounds the Scale."""
self._value = self.get()
if int(self._value) != self._value:
self.set(round(self._value))
##################################################
def __init__(self, parent, *args):
ttk.Scale.__init__(self, parent, from_=0, to=1, *args)
self.parent = parent
self._variable = tk.DoubleVar()
self.configure(variable=self._variable)
self.bind("<ButtonRelease-1>", self._activate, "+")
def setUp(self):
support.root_deiconify()
self.scale = ttk.Scale()
self.scale.pack()
self.scale.update()
def create(self, **kwargs):
return ttk.Scale(self.root, **kwargs)
def create_control_panel(self):
frame=Tkinter.LabelFrame(self.root)
frame.pack(expand='yes',fill='x',side='top')
add_fileicon=Tkinter.PhotoImage(file="../Icons/add_file.gif")
add_directoryicon=Tkinter.PhotoImage(file="../Icons/add_directory.gif")
exiticon=Tkinter.PhotoImage(file="../Icons/exit.gif")
playicon=Tkinter.PhotoImage(file="../Icons/play.gif")
pauseicon=Tkinter.PhotoImage(file="../Icons/pause.gif")
stopicon=Tkinter.PhotoImage(file="../Icons/stop.gif")
rewindicon=Tkinter.PhotoImage(file="../Icons/rewind.gif")
fast_forwardicon=Tkinter.PhotoImage(file="../Icons/fast_forward.gif")
previous_trackicon=Tkinter.PhotoImage(file="../Icons/previous_track.gif")
next_trackicon=Tkinter.PhotoImage(file="../Icons/next_track.gif")
self.muteicon=Tkinter.PhotoImage(file="../Icons/mute.gif")
self.unmuteicon=Tkinter.PhotoImage(file="../Icons/unmute.gif")
delete_selectedicon=Tkinter.PhotoImage(file="../Icons/delete_selected.gif")
list_file=[
(playicon,'self.play'),
(pauseicon,'self.pause'),
(stopicon,'self.stop'),
(previous_trackicon,'self.previous'),
(rewindicon,'self.rewind'),
(fast_forwardicon,'self.fast'),
(next_trackicon,'self.Next'),]
for i,j in list_file:
storeobj=ttk.Button(frame, image=i,command=eval(j))
storeobj.pack(side='left')
storeobj.image=i
self.volume_label=Tkinter.Button(frame,image=self.unmuteicon)
self.volume_label.image=self.unmuteicon
volume=ttk.Scale(frame,from_=Volume_lowest_value, to=Volume_highest_value ,variable=self.var, command=self.update_volume)
volume.pack(side='right', padx=10, )
self.volume_label.pack(side='right')
return
def insert_tk_scale(self, index: int or str="end", *args, **kwargs):
"""Insert a tk.Scale into the game."""
widget = tk.Scale(self.text, **kwargs)
self.text.window_create(index, window=widget)
return widget
def insert_ttk_scale(self, command=None, from_: int=0, length: int=100, to: int=100, value: float=0.0, variable: tk.IntVar=None, index: int or str="end", *args, **kwargs):
"""Insert a ttk.Scale into the game."""
widget = ttk.Scale(self.text, command=command, from_=from_, length=length, to=to, value=value, variable=variable, **kwargs)
self.text.window_create(index, window=widget)
return widget
def create(self, **kwargs):
return ttk.Scale(self.root, **kwargs)
def __init__(self, master, title):
self.title = title
super().__init__(master, text=title, padding=4)
self.player = None # will be connected later
self.volumeVar = tk.DoubleVar(value=100)
self.volumefilter = VolumeFilter()
ttk.Label(self, text="title / artist / album").pack()
self.titleLabel = ttk.Label(self, relief=tk.GROOVE, width=22, anchor=tk.W)
self.titleLabel.pack()
self.artistLabel = ttk.Label(self, relief=tk.GROOVE, width=22, anchor=tk.W)
self.artistLabel.pack()
self.albumlabel = ttk.Label(self, relief=tk.GROOVE, width=22, anchor=tk.W)
self.albumlabel.pack()
f = ttk.Frame(self)
ttk.Label(f, text="time left: ").pack(side=tk.LEFT)
self.timeleftLabel = ttk.Label(f, relief=tk.GROOVE, anchor=tk.CENTER)
self.timeleftLabel.pack(side=tk.RIGHT, fill=tk.X, expand=True)
f.pack(fill=tk.X)
f = ttk.Frame(self)
ttk.Label(f, text="V: ").pack(side=tk.LEFT)
scale = ttk.Scale(f, from_=0, to=150, length=120, variable=self.volumeVar, command=self.on_volumechange)
scale.bind("<Double-1>", self.on_dblclick_vol)
scale.pack(side=tk.LEFT)
self.volumeLabel = ttk.Label(f, text="???%")
self.volumeLabel.pack(side=tk.RIGHT)
f.pack(fill=tk.X)
ttk.Button(self, text="Skip", command=lambda s=self: s.player.skip(s)).pack(pady=4)
self.volume = 100
self.stateLabel = tk.Label(self, text="STATE", relief=tk.SUNKEN, border=1)
self.stateLabel.pack()
self._track = None
self._time = None
self._stream = None
self._state = self.state_needtrack
self.state = self.state_needtrack
self.xfade_state = self.state_xfade_nofade
self.xfade_started = None
self.xfade_start_volume = None
self.playback_started = None
self.track_duration = None
def SetFunctionWidgets(self, rowControl):
## ???????
def SetDistortionLabel():
self.lblDistortion.configure(text="Disturb: " + str(round(self.shSpectr.distortion, 3)))
def SetDistortion(val=0):
distortion = Geo.Val2Val(int(float(val)), [0, 100], [self.shSpectr.distortionRange[0], self.shSpectr.distortionRange[1]])
self.shSpectr.ChangeDistortion(distortion)
SetDistortionLabel()
def SetDegreeLabel():
self.lblDegree.configure(text="Degree: " + str(round(self.shSpectr.degree, 2)))
def SetDegree(val=0):
degree = Geo.Val2Val(int(float(val)), [0, 100], [self.shSpectr.degreeRange[0], self.shSpectr.degreeRange[1]])
self.shSpectr.ChangeDegree(degree)
SetDegreeLabel()
rowControl = self.AddLabel(rowControl, "Function")
self.lblDistortion = ttk.Label(self.frControl)
PlaceWidget(self.lblDistortion, rowControl)
iniDist = Geo.Val2Val(self.shSpectr.distortion, [self.shSpectr.distortionRange[0], self.shSpectr.distortionRange[1]], [0, 100])
self.scDistortion = ttk.Scale(self.frControl, orient='horizontal', length=self.colWidth2, from_=0, to=100, value=iniDist, command=SetDistortion)
rowControl = PlaceWidget(self.scDistortion, rowControl, colspan=2, stick='ne')
SetDistortionLabel()
rowControl = self.AddLabel(rowControl, "Degree", self.lblColor, 1)
self.lblDegree = ttk.Label(self.frControl)
PlaceWidget(self.lblDegree, rowControl)
iniDegree = Geo.Val2Val(self.shSpectr.degree, [self.shSpectr.degreeRange[0], self.shSpectr.degreeRange[1]], [0, 100])
self.scDegree = ttk.Scale(self.frControl, orient='horizontal', length=self.colWidth2, from_=0, to=100, value=iniDegree, command=SetDegree)
rowControl = PlaceWidget(self.scDegree, rowControl, colspan=2, stick='ne')
SetDegreeLabel()
return self.AddLabel(rowControl)
def SetBaseWidgets(self, rowControl):
## ???? (?????, ??????, ??????) ???????
def SetSizeLabel():
self.lblSpSize.configure(text="Order: " + str(self.shSpectr.Size) + ', ' + str(self.shSpectr.numSp + 1))
def SetSpParameters():
self.scIndex.configure(to=self.toIndex())
self.scVMarksize.configure(to=int(self.shSpectr.numZ-1))
self.scColor.configure(to=int(self.shSpectr.numZ-1))
SetSizeLabel()
self.SetIndexLabel()
self.SetLabelVectorColor()
self.SetLabelMSVector()
def ChangeBaseSet(val):
self.shSpectr.BaseSet=val
self.shSpectr.SetForm()
SetSpParameters()
def ChangeSize(val):
iSize = int(float(val))
self.shSpectr.Size= iSize
self.shSpectr.SetForm()
SetSpParameters()
def ChangeIndex(val):
ind = int(float(val))
self.shSpectr.ChangeIndex(ind*self.shSpectr.NumPlots)
self.SetIndexLabel()
rowControl = self.AddLabel(rowControl, "Base", colsp=1)
vBaseSet = self.shSpectr.BaseSets()
sBaseSet = tk.StringVar(self.frControl)
self.omBaseSet = ttk.OptionMenu(self.frControl, sBaseSet, self.shSpectr.BaseSet, *vBaseSet, command=ChangeBaseSet)
rowControl = PlaceWidget(self.omBaseSet, rowControl, col=1, stick='wn')
self.lblSpSize = ttk.Label(self.frControl)
PlaceWidget(self.lblSpSize, rowControl)
SetSizeLabel()
self.scSize = ttk.Scale(self.frControl, orient='horizontal', length=self.colWidth2, from_=self.shSpectr.SizeRange[0], to=self.shSpectr.SizeRange[1], value=self.shSpectr.Size, command=ChangeSize)
rowControl = PlaceWidget(self.scSize, rowControl, col=1, colspan=1, stick='ne')
rowControl = self.AddLabel(rowControl, "Index", self.lblColor, 1)
self.lblSpIndex = ttk.Label(self.frControl) #, text="Index: 0"
PlaceWidget(self.lblSpIndex, rowControl)
self.scIndex = ttk.Scale(self.frControl, orient='horizontal', length=self.colWidth2, from_=0, to=self.toIndex(), value=int(self.shSpectr.iSpectr/self.shSpectr.NumPlots), command=ChangeIndex)
rowControl = PlaceWidget(self.scIndex, rowControl, col=0, colspan=2, stick='ne')
self.SetIndexLabel()
return self.AddLabel(rowControl)
def SetColorWidgets(self, rowControl):
## ????
def CheckVectorColor():
self.shSpectr.useVectorColor = useVectorColor.get()
self.shSpectr.ShowSp()
def ChangeColorMap(val=0):
cmap = SD.mColorMap()[int(float(val))]
self.shSpectr.cmap = cmap
self.lblCmap.configure(text='Map: ' + cmap)
self.shSpectr.ShowSp()
def SetVColor(val=0, ini=False):
iColor = int(float(val))
if not ini:
self.shSpectr.SetColor(iColor)
self.shSpectr.ShowSp()
self.SetLabelVectorColor()
def InverseColor():
self.shSpectr.inverseColor = inverseColor.get()
self.shSpectr.ShowSp()
def SetAlpha(val=0, ini=False):
normAlpha = Geo.Val2Val(float(val), [0, 100], [0, 1])
if not ini:
self.shSpectr.SetAlpha(normAlpha)
self.lblAlpha.configure(text="Alpha: " + str(round(normAlpha, 2)))
rowControl = self.AddLabel(rowControl, "Color", colsp=1)
inverseColor = tk.BooleanVar()
inverseColor.set(False)
self.chkInverseColor = ttk.Checkbutton(self.frControl, text="Reverse", variable=inverseColor, onvalue=True, offvalue=False, command=InverseColor)
rowControl = PlaceWidget(self.chkInverseColor, rowControl, col=1, stick='w')
cmap = self.shSpectr.cmap
self.lblCmap = ttk.Label(self.frControl, text='Map: ' + cmap)
PlaceWidget(self.lblCmap, rowControl)
vColorMap = SD.mColorMap()
indCMap = vColorMap.index(cmap)
self.scColorMap = ttk.Scale(self.frControl, orient='horizontal', length=self.colWidth2, from_=0, to=len(vColorMap)-1, value=indCMap, command=ChangeColorMap)
rowControl = PlaceWidget(self.scColorMap, rowControl, col=1, stick='ne')
useVectorColor = tk.IntVar()
useVectorColor.set(self.shSpectr.useVectorColor)
self.chkVectorColor = ttk.Checkbutton(self.frControl, variable=useVectorColor, onvalue=True, offvalue=False, command=CheckVectorColor)
rowControl = PlaceWidget(self.chkVectorColor, rowControl, col=0, stick='ew')
self.scColor = ttk.Scale(self.frControl, orient='horizontal', length=self.colWidth2, from_=0, to=self.shSpectr.numZ-1, value=self.shSpectr.iColor, command=SetVColor)
rowControl = PlaceWidget(self.scColor, rowControl, col=1, stick='ne')
SetVColor(val=self.shSpectr.iColor, ini=True)
iniAlpha = Geo.Val2Val(self.shSpectr.alpha, [0, 1], [0, 100])
self.lblAlpha = ttk.Label(self.frControl)
PlaceWidget(self.lblAlpha, rowControl)
self.scAlpha = ttk.Scale(self.frControl, orient='horizontal', length=self.colWidth2, from_=0, to=100, value=iniAlpha, command=SetAlpha)
rowControl = PlaceWidget(self.scAlpha, rowControl, col=1, stick='ne')
SetAlpha(self.scAlpha.get(), True)
return self.AddLabel(rowControl)
def SetMarkerWidgets(self, rowControl):
## Markers
def ChangeMarkform(val='o'):
self.shSpectr.mark_style = SD.dicMarkStyle()[val]
self.shSpectr.ShowSp()
def SetMarksizeLabel():
self.lblMarksize.configure(text="Size: " + str(round(self.scMarksize.get(), 1)))
def SetMarksize(val=0):
self.shSpectr.ChangeMarksize(float(val))
SetMarksizeLabel()
def SetVmarksize(val=0, ini=False):
ms = float(val)
if not ini:
self.shSpectr.SetMarksize(ms)
self.SetLabelMSVector()
def CheckMarksize():
self.shSpectr.useVectorMarksize = useVectorMarksize.get()
self.shSpectr.ShowSp()
def InverseMarksize():
self.shSpectr.inverseMarksize = inverseMarksize.get()
self.shSpectr.ShowSp()
rowControl = self.AddLabel(rowControl, "Markers", colsp=1)
vsMarkStyle = list(SD.dicMarkStyle().keys())
sMarkStyle = tk.StringVar(self.frControl)
self.omMarkStyle = ttk.OptionMenu(self.frControl, sMarkStyle, "circle", *vsMarkStyle, command=ChangeMarkform)
rowControl = PlaceWidget(self.omMarkStyle, rowControl, col=1, stick='wn')
self.lblMarksize = ttk.Label(self.frControl)
PlaceWidget(self.lblMarksize, rowControl)
self.scMarksize = ttk.Scale(self.frControl, orient='horizontal', length=self.colWidth2,
from_=self.shSpectr.MarksizeRange[0], to=self.shSpectr.MarksizeRange[1], value=self.shSpectr.msize, command=SetMarksize)
rowControl = PlaceWidget(self.scMarksize, rowControl, col=1, stick='ne')
SetMarksizeLabel()
useVectorMarksize = tk.BooleanVar()
useVectorMarksize.set(self.shSpectr.useVectorMarksize)
self.chkMarkSize = ttk.Checkbutton(self.frControl, variable=useVectorMarksize, onvalue=True, offvalue=False, command=CheckMarksize)
rowControl = PlaceWidget(self.chkMarkSize, rowControl, col=0, stick='ew')
self.scVMarksize = ttk.Scale(self.frControl, orient='horizontal', length=100, from_=0, to=self.shSpectr.numZ-1, value=self.shSpectr.iMarksize, command=SetVmarksize)
rowControl = PlaceWidget(self.scVMarksize, rowControl, col=1, stick='ew')
SetVmarksize(val=self.shSpectr.iMarksize, ini=True)
inverseMarksize = tk.BooleanVar()
inverseMarksize.set(self.shSpectr.inverseMarksize)
self.chkInverseMarksize = ttk.Checkbutton(self.frControl, text="Reverse", variable=inverseMarksize, onvalue=True, offvalue=False, command=InverseMarksize)
rowControl = PlaceWidget(self.chkInverseMarksize, rowControl, col=0, colspan=2, stick='wn')
return self.AddLabel(rowControl)
def SetMaskWidgets(self, rowControl):
## ????? ????????????
def ChangeMaskFunction(val='Var'):
self.shSpectr.MaskFunction = val
self.shSpectr.ShowSp()
def SetMask(val=0, ini=False):
self.shSpectr.iMask = int(float(val))
self.chkMask.configure(text='Use: ' + str(int(self.shSpectr.iMask)))
if not ini:
self.shSpectr.ShowSp()
def CheckMask():
self.shSpectr.useMask = useMask.get()
self.shSpectr.ShowSp()
def InverseMask():
self.shSpectr.inverseMask = inverseMask.get()
self.shSpectr.ShowSp()
rowControl = self.AddLabel(rowControl, "Mask", colsp=1)
vsMaskFunction = ['Std', 'Mean']
sMaskFunction = tk.StringVar(self.frControl)
self.omMaskFunction = ttk.OptionMenu(self.frControl, sMaskFunction, "Std", *vsMaskFunction, command=ChangeMaskFunction)
rowControl = PlaceWidget(self.omMaskFunction, rowControl, col=1, stick='w')
useMask = tk.IntVar()
useMask.set(False)
self.chkMask = ttk.Checkbutton(self.frControl, variable=useMask, onvalue=True, offvalue=False, command=CheckMask)
rowControl = PlaceWidget(self.chkMask, rowControl, col=0, stick='ew')
self.scMask = ttk.Scale(self.frControl, orient='horizontal', length=self.colWidth2, from_=0, to=100, value=self.shSpectr.iMask, command=SetMask)
rowControl = PlaceWidget(self.scMask, rowControl, col=1, stick='ne')
SetMask(val=self.shSpectr.iMask, ini=True)
inverseMask = tk.BooleanVar()
inverseMask.set(self.shSpectr.inverseMask)
self.chkInverseMask = ttk.Checkbutton(self.frControl, text="Inverse", variable=inverseMask, onvalue=True, offvalue=False, command=InverseMask)
rowControl = PlaceWidget(self.chkInverseMask, rowControl, col=0, colspan=2, stick='wn')
return self.AddLabel(rowControl)