tkinter slider
Um slider bem bosta mesmo, pouco otimizado, usar em ultimo casounknown
python
4 years ago
3.4 kB
3
Indexable
from tkinter import Frame from tkinter.ttk import Label, Scale, Spinbox, Style class Slider(Frame): MINIMO = 100 MAXIMO = 2400 def __init__(self, master, label, *args, **kwargs): ''' parametros ---------- master : tkinter.widget label : str ''' super(Slider, self).__init__(master, *args, **kwargs) self._criar_estilo_label() self._criar_label(label) self._criar_spinbox() self._criar_scale() self.set_atual(self.MINIMO) def _criar_estilo_label(self): estilo = Style() estilo.configure('Slider.TLabel', font=('Arial', 14, 'normal')) def _criar_label(self, label): ''' Criar label. ''' frame = Frame(self, width=150, height=50) label = Label(frame, text=label, anchor='center', style='Slider.TLabel') label.bind('<Double-Button-1>', lambda e: self._spinbox.focus()) label.pack(fill='both', expand=True, padx=5, pady=5) frame.pack(side='left') frame.pack_propagate(False) def _criar_spinbox(self): ''' Criar Widget spinbox. ''' self._spinbox = Spinbox(self, from_=self.MINIMO, to=self.MAXIMO, font=('Arial', 14, 'normal')) self._spinbox['command'] = lambda: \ self.set_atual(self._spinbox.get(), widget=self._spinbox) self._spinbox.bind('<Return>', lambda e: \ self.set_atual(self._spinbox.get())) self._spinbox.pack(side='left', anchor='center') def _criar_scale(self): ''' Criar widget Scale. ''' self._scale = Scale(self, from_=self.MINIMO, to=self.MAXIMO, orient='horizontal') self._scale['command'] = lambda e: \ self.set_atual(self._scale.get(), widget=self._scale) self._scale.pack(side='left', fill='both', anchor='s', expand=True, ) def atual(self): ''' Obter o valor atual retornos -------- int ''' return self._scale.get() def set_atual(self, atual, **kwargs): ''' Define o valor atual. parametros ---------- atual : int ''' # caractere númerico é convertido em inteiro. if isinstance(atual, str) and atual.isdigit(): atual = int(atual) # caractere não númerico convertido em inteiro. if not isinstance(atual, int): atual = self._scale.get() # atual fora do range. if atual not in range(self.MINIMO, self.MAXIMO): atual = self._scale.get() widget = kwargs.get('widget') if widget: if isinstance(widget, Scale): self._spinbox.delete(0, 'end') self._spinbox.insert(0, str(atual)) elif isinstance(widget, Spinbox): self._scale.set(atual) else: self._spinbox.delete(0, 'end') self._spinbox.insert(0, str(atual)) self._scale.set(atual)
Editor is loading...