Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Python tkinter widget for range selection in slider widget structure with two handles
Range selection widget for Python Tkinter GUI developement in slider widget structure with two handles.
Updates and Fixes in v2023.07.2 w.r.t v2023.07.1
Updates and Fixes in v2023.07.1 w.r.t v2022.12.1
Updates and Fixes in v2022.12.1 w.r.t. v2021.7.4
Note: In order to set the initial values -- declare initial value to the handle variable, if undeclared both handles will be set to min_val. See example in Usage section.
Features:
[preview.png] image file in repository.
Importing required sliders
For horizontal RangeSlider:
from RangeSlider.RangeSlider import RangeSliderH
For vertical RangeSlider:
from RangeSlider.RangeSlider import RangeSliderV
For both horizontal and vertical RangeSlider:
from RangeSlider.RangeSlider import RangeSliderH, RangeSliderV
Creating Simple RangeSlider widget:
from tkinter.ttk import *
import tkinter as tk
root = tk.Tk()
hLeft = tk.DoubleVar(value = 0.2) #left handle variable initialised to value 0.2
hRight = tk.DoubleVar(value = 0.85) #right handle variable initialised to value 0.85
hSlider = RangeSliderH( root , [hLeft, hRight] , padX = 12) #horizontal slider, [padX] value might be needed to be different depending on system, font and handle size. Usually [padX] = 12 serves,
#otherwise a recommended value will be shown through an error message
hSlider.pack() # or grid or place method could be used
vBottom = tk.DoubleVar(value = 0) #bottom handle variable
vTop = tk.DoubleVar(value = 1) #top handle variable
vSlider = RangeSliderV( root, [vBottom, vTop] , padY = 12) #vertical slider, [padY] value might be needed to be different depending on system, font and handle size. Usually [padY] = 12 serves,
#otherwise a recommended value will be shown through an error message
vSlider.pack() # or grid or place method could be used
root.mainloop()
Getting current value
print ( hSlider.getValues() ) #return type list of format [ left handle value, right handle value ]
print ( vSlider.getValues() ) #return type list of format [ bottom handle value, top handle value ]
Force value
hSlider.forceValues([0.2, 0.67]) #returns None
vSlider.forceValues([0.62, 0.85]) #returns None
Callback on value change
def doSomething():
print ('I was called.')
hLeft.trace_add('w', doSomething)
hRight.trace_add('w', doSomething)
vBottom.trace_add('w', doSomething)
vTop.trace_add('w', doSomething)
Attributes
For RangeSliderH:
Attribute | Default Value | Acceptable Value(s) or Description | Release Comment |
---|---|---|---|
master | N/A | parent like Tk instance, TopLevel, or Frame etc. | v2021.7.4 |
variables | N/A | list of DoubleVar of length two in order of left handle and right handle | v2021.7.4 |
Width | 400 | width of widget in px | v2021.7.4 |
Height | 80 | height of widget in px | v2021.7.4 |
min_val | 0 | minimum value | v2021.7.4 |
max_val | 1 | maximum value | v2021.7.4 |
padX | 3 | padding from both left and right in px | v2021.7.4 |
image_anchorR | CENTER | anchor value for right handle if image is used as handle - N, NE, E, SE, S, SW, W, NW, CENTER | v2021.7.4 |
image_anchorL | CENTER | anchor value for left handle if image is used as handle - N, NE, E, SE, S, SW, W, NW, CENTER | v2021.7.4 |
imageL | None | PhotoImage instance for imaged left handle | v2021.7.4 |
imageR | None | PhotoImage instance for imaged right handle | v2021.7.4 |
auto | True | True for automatic circular colored handle, False for imaged handle | v2021.7.4 |
line_width | 3 | width of widget track in px | v2021.7.4 |
bar_radius | 10 | radius of outer circle of handle | v2021.7.4 |
bar_color_inner | '#5c8a8a' | hex value of color for inner circle in string format | v2021.7.4 |
bar_color_outer | '#c2d6d6' | hex value of color for inner circle in string format | v2021.7.4 |
line_s_color | '#0a50ff' | hex value of color for selected portion for widget track in string format | v2021.7.4 |
line_color | '#476b6b' | hex value of color for unselected portion for widget track in string format | v2021.7.4 |
bgColor | '#ffffff' | hex value of color for background of widget in string format | v2021.7.4 |
step_marker_color | '#ffffff' | hex value of color in string format for steps marked on widget bar | v2022.12.1 |
font_color | '#000000' | hex value of color for font of widget in string format | v2022.12.1 |
show_value | True | True if current value of handle are intended; otherwise False | v2021.7.4 |
digit_precision | '.1f' | precision format for shown value | v2021.7.4 |
valueSide | 'TOP' | 'TOP' if shown value intended above the handle or 'BOTTOM' if shown value intended below the handle | v2021.7.4 |
font_family | 'Times' | font family ( all font families supported by tkinter are acceptable ) | v2021.7.4 |
font_size | 16 | font size in pt | v2021.7.4 |
suffix | "" | suffix for shown value | v2021.7.4 |
step_size | 0 | step size of handle movement, step_size equal to 0 implies continuous movement subject to system architecture floating point resolution | v2022.12.1 |
step_marker | False | True if to display step markers on bar; otherwise False | v2022.12.1 |
cross_each_other | False | True if handles can cross each other | v2022.12.1 |
For RangeSliderV:
Attribute | Default Value | Acceptable Value(s) | Release Comment |
---|---|---|---|
master | N/A | parent like Tk instance, TopLevel, or Frame etc. | v2021.7.4 |
variables | N/A | list of DoubleVar of length two in order of lower handle and upper handle | v2021.7.4 |
Width | 80 | width of widget in px | v2021.7.4 |
Height | 400 | height of widget in px | v2021.7.4 |
min_val | 0 | minimum value | v2021.7.4 |
max_val | 1 | maximum value | v2021.7.4 |
padY | 3 | padding from both top and bottom in px | v2021.7.4 |
image_anchorU | CENTER | anchor value for upper handle if image is used as handle - N, NE, E, SE, S, SW, W, NW, CENTER | v2021.7.4 |
image_anchorL | CENTER | anchor value for lower handle if image is used as handle - N, NE, E, SE, S, SW, W, NW, CENTER | v2021.7.4 |
imageL | None | PhotoImage instance for imaged lower handle | v2021.7.4 |
imageU | None | PhotoImage instance for imaged upper handle | v2021.7.4 |
auto | True | True for automatic circular colored handle, False for imaged handle | v2021.7.4 |
line_width | 3 | width of widget track in px | v2021.7.4 |
bar_radius | 10 | radius of outer circle of handle | v2021.7.4 |
bar_color_inner | '#5c8a8a' | hex value of color for inner circle in string format | v2021.7.4 |
bar_color_outer | '#c2d6d6' | hex value of color for inner circle in string format | v2021.7.4 |
line_s_color | '#0a50ff' | hex value of color for selected portion for widget track in string format | v2021.7.4 |
line_color | '#476b6b' | hex value of color for unselected portion for widget track in string format | v2021.7.4 |
bgColor | '#ffffff' | hex value of color for background of widget in string format | v2021.7.4 |
step_marker_color | '#ffffff' | hex value of color in string format for steps marked on widget bar | v2022.12.1 |
font_color | '#000000' | hex value of color for font of widget in string format | v2022.12.1 |
show_value | True | True if current value of handle are intended; otherwise False | v2021.7.4 |
digit_precision | '.1f' | precision format for shown value | v2021.7.4 |
valueSide | 'TOP' | 'TOP' if shown value intended above the handle or 'BOTTOM' if shown value intended below the handle | v2021.7.4 |
font_family | 'Times' | font family ( all font families supported by tkinter are acceptable ) | v2021.7.4 |
font_size | 16 | font size in pt | v2021.7.4 |
suffix | "" | suffix for shown value | v2021.7.4 |
step_size | 0 | step size of handle movement, step_size equal to 0 implies continuous movement subject to system architecture floating point resolution | v2022.12.1 |
step_marker | False | True if to display step markers on bar; otherwise False | v2022.12.1 |
cross_each_other | False | True if handles can cross each other | v2022.12.1 |
Additional Notes for attributes
Exceptions raised
Condition | Exception |
---|---|
if auto is True and either imageL or imageU or imageR or combination out of three is also given | Exception raised: "Can't decide if to use auto shape or images!" |
if auto is False and one of the image handles is missing | Exception raised: "Handle for one image missing." |
if auto is False and dimensions for both handles provided are not same | Exception raised : "Image dimensions incompatible, both handles should have same height and width respectively." |
if Width or Height or padX or padY are not sufficient to render the widget with all features visible safely | Exception raised : $dimension$ not suitable with suggestions to avoid it |
Functions
Function | Arguments | Output Format |
---|---|---|
getValues() | NIL | value of handle variables in list format in the same order as given in object definition, returned values lie between min_val and max_val |
getPos() | NIL | normalised value of handle variables in list format in the same order as given in object definition, returned values lie between 0 and 1 |
forceValues(values) | values : a list of two values each indicating value of handle, values must be between min_val and max_val | return None |
forcePos(pos) | pos : a list of two normalised values each indicating value of handle, values must be between 0 and 1 | return None |
Note: The relation between value ($v_i$) and normalised value ($n_i$) of $i^{th}$ handle defined for a slider with max_val of $v_<$ and min_val of $v_>$ is given by:
$\begin{equation} n_i = \frac{v_i - v_>}{v_<-v_>} \end{equation}$
This is the second version of this library. It is one of its kind widget for tkinter. When I was developing a tool for my college project I found that at the time no inbuilt or external tool is available for tkinter allowing range selection. However, range selection is a high demand tool specially for applications dealing with data visualizations. I would appreciate any developer from any community who wants to contribute to this project.
I thank RWitak and Sebastian for contributing to this project.
FAQs
Python tkinter widget for range selection in slider widget structure with two handles
We found that RangeSlider demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.