Python - SpinButton PyGtk. Rango máximo en decimales

 
Vista:
sin imagen de perfil
Val: 8
Ha disminuido su posición en 9 puestos en Python (en relación al último mes)
Gráfica de Python

SpinButton PyGtk. Rango máximo en decimales

Publicado por José Francisco (5 intervenciones) el 27/06/2018 21:43:28
Hola a todos.

Estoy trabajando en un proyecto personal, en el que quiero usar SpinButton para ajustar un horario.
Debido a esto, necesito que el rango máximo del SpinButton sea de 23.59, algo que es sencillo.

1
2
3
adjustment = Gtk.Adjustment(value=0, lower=0, upper=24,step_incr=0.10,
             page_incr=1, page_size=0.01)
self.spinbutton1.set_adjustment(adjustment)

El problema se plantea en que los decimales del número, salten al siguiente en x.59 y no en x.99.

Me preguntaba si esto es posible, y en caso de que no lo sea, si existe otra opción para situar horarios.

Estoy usando Python 3.5.2 y PyGtk 3.0, y por si afecta en algo, la interfaz del programa ha sido diseñada con Glade 3.18.3 aunque las propiedades se asignan con PyGtk
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

SpinButton PyGtk. Rango máximo en decimales

Publicado por kip (257 intervenciones) el 28/06/2018 21:16:32
Hola, he hecho algo en base a la documentación de GTK a ver si te sirve, aclaro que es la primera vez que toco GTK y de seguro existe un modo mas elegante de llegar a lo que necesitas. Lo que hice fue simple, enlace una función a la señal 'value-changed' y desde alli modifique el valor del widget:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
 
class SpinButtonWindow(Gtk.Window):
 
    def __init__(self):
        Gtk.Window.__init__(self, title="SpinButton Demo")
        self.set_border_width(10)
 
        hbox = Gtk.Box(spacing=12)
        self.add(hbox)
 
        adjustment = Gtk.Adjustment(0, 0, 24, 0.01, 2, 0)
        self.spinbutton = Gtk.SpinButton()
        self.spinbutton.set_adjustment(adjustment)
        self.spinbutton.set_digits(2)
        hbox.pack_start(self.spinbutton, False, False, 0)
 
        self.spinbutton.connect('value-changed', self.changed)
 
    def changed(self, spin, data=None):
        time = spin.get_value()
        hours = int(time)
        seconds = int(round(time % 1, 2) * 100)
 
        if  99 >= seconds > 90:
            spin.set_value(hours + 0.59)
        elif seconds > 59:
            spin.set_value(hours + 1)
        else:
            pass
 
 
win = SpinButtonWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

HF60NSMpPO
Se ve que a veces saltan los números porque el screenrecorder no funciona en tiempo real....

El manejar decimales te va traer un dolor de cabeza, mi consejo es que coloques otro SpinButton para los minutos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 9 puestos en Python (en relación al último mes)
Gráfica de Python

SpinButton PyGtk. Rango máximo en decimales

Publicado por José Francisco (5 intervenciones) el 29/06/2018 20:42:51
En primer lugar, darte las gracias por tu respuesta, y por ese tiempo que dedicáis a los que estamos empezando.

El método es poco elegante en cuanto al código, pero si funciona sin errores, lo prefiero antes que perder elegancia en la interfaz.

Como necesito usar varios SpinButton para horarios, colocare uno con este sistema y otro con el de doble SpinButton (horas y minutos), para ver la funcionalidad de cara al usuario, y la que más me convenza se quedara en el proyecto.

También decirte que me has abierto la puerta con lo de modificar el valor del widget. Estudiare detenidamente el código en ese aspecto para intentar entender realmente lo que has hecho, y como lo has hecho, por si puede serme útil en futuros problemas.

Un Saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar