Programmare in pygobject

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygtk

Messaggioda ZeroUno » mer ott 04, 2017 10:41

print(button.__doc__)

Codice: Seleziona tutto

None


print(dir(button))

Codice: Seleziona tutto

['__bool__', '__class__', '__contains__', '__copy__', '__deepcopy__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__gdoc__', '__ge__', '__getattribute__', '__gpointer__', '__grefcount__', '__gsignals__', '__gt__', '__gtype__', '__hash__', '__info__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_force_floating', '_init', '_ref', '_ref_sink', '_unref', '_unsupported_data_method', '_unsupported_method', 'activate', 'add', 'add_accelerator', 'add_child', 'add_device_events', 'add_events', 'add_mnemonic_label', 'add_tick_callback', 'bin', 'bind_property', 'bind_property_full', 'bind_template_callback_full', 'bind_template_child_full', 'can_activate_accel', 'chain', 'check_resize', 'child_focus', 'child_get', 'child_get_property', 'child_notify', 'child_notify_by_pspec', 'child_set', 'child_set_property', 'child_type', 'class_path', 'clicked', 'compat_control', 'compute_expand', 'connect', 'connect_after', 'connect_data', 'connect_object', 'connect_object_after', 'construct_child', 'container', 'create_pango_context', 'create_pango_layout', 'custom_finished', 'custom_tag_end', 'custom_tag_start', 'destroy', 'destroyed', 'device_is_shadowed', 'disconnect', 'disconnect_by_func', 'do_activate', 'do_add', 'do_adjust_baseline_allocation', 'do_adjust_baseline_request', 'do_adjust_size_allocation', 'do_adjust_size_request', 'do_button_press_event', 'do_button_release_event', 'do_can_activate_accel', 'do_check_resize', 'do_child_notify', 'do_child_type', 'do_clicked', 'do_composite_name', 'do_composited_changed', 'do_compute_expand', 'do_configure_event', 'do_damage_event', 'do_delete_event', 'do_destroy', 'do_destroy_event', 'do_direction_changed', 'do_dispatch_child_properties_changed', 'do_drag_begin', 'do_drag_data_delete', 'do_drag_data_get', 'do_drag_data_received', 'do_drag_drop', 'do_drag_end', 'do_drag_failed', 'do_drag_leave', 'do_drag_motion', 'do_draw', 'do_enter', 'do_enter_notify_event', 'do_event', 'do_focus', 'do_focus_in_event', 'do_focus_out_event', 'do_forall', 'do_get_accessible', 'do_get_child_property', 'do_get_path_for_child', 'do_get_preferred_height', 'do_get_preferred_height_and_baseline_for_width', 'do_get_preferred_height_for_width', 'do_get_preferred_width', 'do_get_preferred_width_for_height', 'do_get_request_mode', 'do_grab_broken_event', 'do_grab_focus', 'do_grab_notify', 'do_hide', 'do_hierarchy_changed', 'do_key_press_event', 'do_key_release_event', 'do_keynav_failed', 'do_leave', 'do_leave_notify_event', 'do_map', 'do_map_event', 'do_mnemonic_activate', 'do_motion_notify_event', 'do_move_focus', 'do_parent_set', 'do_popup_menu', 'do_pressed', 'do_property_notify_event', 'do_proximity_in_event', 'do_proximity_out_event', 'do_query_tooltip', 'do_queue_draw_region', 'do_realize', 'do_released', 'do_remove', 'do_screen_changed', 'do_scroll_event', 'do_selection_clear_event', 'do_selection_get', 'do_selection_notify_event', 'do_selection_received', 'do_selection_request_event', 'do_set_child_property', 'do_set_focus_child', 'do_set_related_action', 'do_show', 'do_show_all', 'do_show_help', 'do_size_allocate', 'do_state_changed', 'do_state_flags_changed', 'do_style_set', 'do_style_updated', 'do_touch_event', 'do_unmap', 'do_unmap_event', 'do_unrealize', 'do_visibility_notify_event', 'do_window_state_event', 'drag_begin', 'drag_begin_with_coordinates', 'drag_check_threshold', 'drag_dest_add_image_targets', 'drag_dest_add_text_targets', 'drag_dest_add_uri_targets', 'drag_dest_find_target', 'drag_dest_get_target_list', 'drag_dest_get_track_motion', 'drag_dest_set', 'drag_dest_set_proxy', 'drag_dest_set_target_list', 'drag_dest_set_track_motion', 'drag_dest_unset', 'drag_get_data', 'drag_highlight', 'drag_source_add_image_targets', 'drag_source_add_text_targets', 'drag_source_add_uri_targets', 'drag_source_get_target_list', 'drag_source_set', 'drag_source_set_icon_gicon', 'drag_source_set_icon_name', 'drag_source_set_icon_pixbuf', 'drag_source_set_icon_stock', 'drag_source_set_target_list', 'drag_source_unset', 'drag_unhighlight', 'draw', 'emit', 'emit_stop_by_name', 'ensure_style', 'enter', 'error_bell', 'event', 'find_child_property', 'find_property', 'find_style_property', 'forall', 'force_floating', 'foreach', 'freeze_child_notify', 'freeze_notify', 'g_type_instance', 'get_accessible', 'get_action_group', 'get_action_name', 'get_action_target_value', 'get_alignment', 'get_allocated_baseline', 'get_allocated_height', 'get_allocated_size', 'get_allocated_width', 'get_allocation', 'get_always_show_image', 'get_ancestor', 'get_app_paintable', 'get_border_width', 'get_can_default', 'get_can_focus', 'get_child', 'get_child_requisition', 'get_child_visible', 'get_children', 'get_clip', 'get_clipboard', 'get_composite_name', 'get_css_name', 'get_data', 'get_default_direction', 'get_default_style', 'get_device_enabled', 'get_device_events', 'get_direction', 'get_display', 'get_double_buffered', 'get_event_window', 'get_events', 'get_focus_chain', 'get_focus_child', 'get_focus_hadjustment', 'get_focus_on_click', 'get_focus_vadjustment', 'get_font_map', 'get_font_options', 'get_frame_clock', 'get_halign', 'get_has_tooltip', 'get_has_window', 'get_hexpand', 'get_hexpand_set', 'get_image', 'get_image_position', 'get_internal_child', 'get_label', 'get_mapped', 'get_margin_bottom', 'get_margin_end', 'get_margin_left', 'get_margin_right', 'get_margin_start', 'get_margin_top', 'get_modifier_mask', 'get_modifier_style', 'get_name', 'get_no_show_all', 'get_opacity', 'get_pango_context', 'get_parent', 'get_parent_window', 'get_path', 'get_path_for_child', 'get_pointer', 'get_preferred_height', 'get_preferred_height_and_baseline_for_width', 'get_preferred_height_for_width', 'get_preferred_size', 'get_preferred_width', 'get_preferred_width_for_height', 'get_properties', 'get_property', 'get_qdata', 'get_realized', 'get_receives_default', 'get_related_action', 'get_relief', 'get_request_mode', 'get_requisition', 'get_resize_mode', 'get_root_window', 'get_scale_factor', 'get_screen', 'get_sensitive', 'get_settings', 'get_size_request', 'get_state', 'get_state_flags', 'get_style', 'get_style_context', 'get_support_multidevice', 'get_template_child', 'get_tooltip_markup', 'get_tooltip_text', 'get_tooltip_window', 'get_toplevel', 'get_use_action_appearance', 'get_use_stock', 'get_use_underline', 'get_valign', 'get_valign_with_baseline', 'get_vexpand', 'get_vexpand_set', 'get_visible', 'get_visual', 'get_window', 'grab_add', 'grab_default', 'grab_focus', 'grab_remove', 'handle_border_width', 'handler_block', 'handler_block_by_func', 'handler_disconnect', 'handler_is_connected', 'handler_unblock', 'handler_unblock_by_func', 'has_default', 'has_focus', 'has_grab', 'has_rc_style', 'has_screen', 'has_visible_focus', 'hide', 'hide_on_delete', 'in_destruction', 'init_template', 'input_shape_combine_region', 'insert_action_group', 'install_child_properties', 'install_child_property', 'install_properties', 'install_property', 'install_style_property', 'interface_find_property', 'interface_install_property', 'interface_list_properties', 'intersect', 'is_ancestor', 'is_composited', 'is_drawable', 'is_floating', 'is_focus', 'is_sensitive', 'is_toplevel', 'is_visible', 'keynav_failed', 'leave', 'list_accel_closures', 'list_action_prefixes', 'list_child_properties', 'list_mnemonic_labels', 'list_properties', 'list_style_properties', 'map', 'mnemonic_activate', 'modify_base', 'modify_bg', 'modify_cursor', 'modify_fg', 'modify_font', 'modify_style', 'modify_text', 'new', 'new_from_icon_name', 'new_from_stock', 'new_with_label', 'new_with_mnemonic', 'notify', 'notify_by_pspec', 'override_background_color', 'override_color', 'override_cursor', 'override_font', 'override_property', 'override_symbolic_color', 'parent_instance', 'parser_finished', 'path', 'pop_composite_child', 'pressed', 'priv', 'propagate_draw', 'props', 'push_composite_child', 'qdata', 'queue_allocate', 'queue_compute_expand', 'queue_draw', 'queue_draw_area', 'queue_draw_region', 'queue_resize', 'queue_resize_no_redraw', 'realize', 'ref', 'ref_count', 'ref_sink', 'region_intersect', 'register_window', 'released', 'remove', 'remove_accelerator', 'remove_mnemonic_label', 'remove_tick_callback', 'render_icon', 'render_icon_pixbuf', 'reparent', 'replace_data', 'replace_qdata', 'reset_rc_styles', 'reset_style', 'resize_children', 'run_dispose', 'send_expose', 'send_focus_change', 'set_accel_path', 'set_accessible_role', 'set_accessible_type', 'set_action_name', 'set_action_target_value', 'set_alignment', 'set_allocation', 'set_always_show_image', 'set_app_paintable', 'set_border_width', 'set_buildable_property', 'set_can_default', 'set_can_focus', 'set_child_visible', 'set_clip', 'set_composite_name', 'set_connect_func', 'set_css_name', 'set_data', 'set_default_direction', 'set_detailed_action_name', 'set_device_enabled', 'set_device_events', 'set_direction', 'set_double_buffered', 'set_events', 'set_focus_chain', 'set_focus_child', 'set_focus_hadjustment', 'set_focus_on_click', 'set_focus_vadjustment', 'set_font_map', 'set_font_options', 'set_halign', 'set_has_tooltip', 'set_has_window', 'set_hexpand', 'set_hexpand_set', 'set_image', 'set_image_position', 'set_label', 'set_mapped', 'set_margin_bottom', 'set_margin_end', 'set_margin_left', 'set_margin_right', 'set_margin_start', 'set_margin_top', 'set_name', 'set_no_show_all', 'set_opacity', 'set_parent', 'set_parent_window', 'set_properties', 'set_property', 'set_realized', 'set_reallocate_redraws', 'set_receives_default', 'set_redraw_on_allocate', 'set_related_action', 'set_relief', 'set_resize_mode', 'set_sensitive', 'set_size_request', 'set_state', 'set_state_flags', 'set_style', 'set_support_multidevice', 'set_template', 'set_template_from_resource', 'set_tooltip_markup', 'set_tooltip_text', 'set_tooltip_window', 'set_use_action_appearance', 'set_use_stock', 'set_use_underline', 'set_valign', 'set_vexpand', 'set_vexpand_set', 'set_visible', 'set_visual', 'set_window', 'shape_combine_region', 'show', 'show_all', 'show_now', 'size_allocate', 'size_allocate_with_baseline', 'size_request', 'steal_data', 'steal_qdata', 'stop_emission', 'stop_emission_by_name', 'style_attach', 'style_get_property', 'sync_action_properties', 'thaw_child_notify', 'thaw_notify', 'translate_coordinates', 'trigger_tooltip_query', 'unmap', 'unparent', 'unrealize', 'unref', 'unregister_window', 'unset_focus_chain', 'unset_state_flags', 'watch_closure', 'weak_ref', 'widget']

queste le avevo viste anche con il debugger di visualstudio, ma è solo un elenco di proprietà ma non riesco a capire dove sarebbe memorizzato il colore

print(button.override_background_color)

Codice: Seleziona tutto

gi.FunctionInfo(override_background_color)


più interessanti - ma anche quì non ho trovato quello che mi serve -
print (dir(button.props))

Codice: Seleziona tutto

['action_name', 'action_target', 'always_show_image', 'app_paintable', 'border_width', 'can_default', 'can_focus', 'child', 'composite_child', 'double_buffered', 'events', 'expand', 'focus_on_click', 'halign', 'has_default', 'has_focus', 'has_tooltip', 'height_request', 'hexpand', 'hexpand_set', 'image', 'image_position', 'is_focus', 'label', 'margin', 'margin_bottom', 'margin_end', 'margin_left', 'margin_right', 'margin_start', 'margin_top', 'name', 'no_show_all', 'opacity', 'parent', 'receives_default', 'related_action', 'relief', 'resize_mode', 'scale_factor', 'sensitive', 'style', 'tooltip_markup', 'tooltip_text', 'use_action_appearance', 'use_stock', 'use_underline', 'valign', 'vexpand', 'vexpand_set', 'visible', 'width_request', 'window', 'xalign', 'yalign']



in verità credo che devo cercare nelle properties di 'area' e non di button, ma non ho trovato niente neanche lì, mentre in 'button' dovrei vedere se ha aggiunto l'area.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygtk

Messaggioda ZeroUno » gio ott 05, 2017 0:33

Una preview. Fa abbastanza schifetto ma è un inizio.
Ho usato GtkGrid per posizionare gli oggetti.
slackpkg+gtk.png
slackpkg+gtk.png (17.35 KiB) Visto 899 volte
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
lablinux
Linux 3.x
Linux 3.x
Messaggi: 1041
Iscritto il: gio nov 27, 2008 12:23
Slackware: 14 64bit
Desktop: kde4
Località: Rho
Contatta:

Re: Programmare in pygtk

Messaggioda lablinux » gio ott 05, 2017 8:27

beh non è male. Non credo si possa fare molto meglio con pygtk.
Dai un'occhiata a kyvi, si installa in python con pip.

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygtk

Messaggioda ZeroUno » gio ott 05, 2017 8:31

Solo non mi piacciono quei pulsanti on/off così grandi.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
brg
Linux 2.4
Linux 2.4
Messaggi: 413
Iscritto il: sab mar 12, 2011 14:20
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE4
Località: Montecatini
Contatta:

Re: Programmare in pygtk

Messaggioda brg » gio ott 05, 2017 14:06

Ti consiglio di leggerti le linee guida di gnome per la progettazione di interfacce:
https://developer.gnome.org/hig/stable/ ... ut.html.en .

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygobject

Messaggioda ZeroUno » gio ott 05, 2017 22:52

Grazie.

Così dovrebbe andare un po' meglio.
Non vi faccio vedere il codice per pietà :D

slackpkg+gtk1.png
slackpkg+gtk1.png (19.82 KiB) Visto 827 volte

lasciate stare i bordi e la scritta al centro... è un bug di ksnapshot :)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygobject

Messaggioda ZeroUno » ven ott 06, 2017 23:28

in una gui in gtk ho messo un pulsante e qualche altro oggetto.
al pulsante ho associato un evento che impiega un po' di tempo ad essere eseguito; durante l'esecuzione fa un po' di aggiornamenti alla gui, tra cui spostare oggetti, ma gli spostamenti vengono applicati solo ad esecuzione terminata.
C'è modo di fargli aggiornare la gui durante l'esecuzione di un evento?
Mi viene in mente per esempio una progressbar che ti mostra lo stato di avanzamento, ma se la gui si aggiorna solo a fine attività allora la progressbar è poco utile.
Non è previsto che l'utente prema altri pulsanti durante l'esecuzione.
Ho provato con Gtk.Widget.queue_draw(self) ma non sortisce alcun effetto.
Ho visto in giro che il problema è abbastanza comune (almeno ai neofiti come me) ma non sono riuscito a trovare la soluzione.
C'è una soluzione?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
brg
Linux 2.4
Linux 2.4
Messaggi: 413
Iscritto il: sab mar 12, 2011 14:20
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE4
Località: Montecatini
Contatta:

Re: Programmare in pygobject

Messaggioda brg » sab ott 07, 2017 10:19

Una bella applicazione multithread.

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygobject

Messaggioda ZeroUno » sab ott 07, 2017 16:17

nel caso specifico mi sono potuto permettere un sistema alternativo, che non mi piace, ma non era il caso (ora) di fare un multithread.
Il tipo di elaborazione in se è veloce; lenta è la presentazione dei risultati. Quindi ho fatto fare tutto il calcolo e messo in un array la roba da presentare, poi con GObject.timeout_add presento i risultati in modalità batch.

quello che dovrò fare più avanti invece è diverso.
Ma io posso lanciare un comando shell e vedere l'output su un textbox come fosse un tail -f ?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygobject

Messaggioda ZeroUno » lun ott 09, 2017 19:17

Ho un Gtk.Stack / Gtk.StackSwitcher

Popolo all'avvio tutti i tab dello stack, ma poi mi sarebbe utile che quando clicco sullo switcher mi facesse opportune modifiche al tab che sta per venire (ed anche agli altri) prima che questo venga presentato, oppure che mi validi il contenuto del tab attuale prima di passare ad un altro ed eventualmente negare il passaggio e forzare a rimanere sullo stesso per fare opportune modifiche (per esempio se metto settaggi incompatibili).
Ma non sono riuscito a trovare un evento dello switcher con cui fare questo.

Come si fa?


edit: Trovato evento notify::visible-child-name
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygobject

Messaggioda ZeroUno » mar ott 10, 2017 15:04

Altro passo..
Ho una tabella fatta con Gtk.TreeView di cui una delle colonne è popolata con Gtk.CellRendererPixbuf. Nelle caselle ci sono quindi immagini. Io voglio assegnare un evento di click a queste immagini.

si può?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
brg
Linux 2.4
Linux 2.4
Messaggi: 413
Iscritto il: sab mar 12, 2011 14:20
Slackware: 14.2
Kernel: 4.4.38
Desktop: KDE4
Località: Montecatini
Contatta:

Re: Programmare in pygobject

Messaggioda brg » lun ott 16, 2017 9:44

Nelle caselle ci sono quindi immagini. Io voglio assegnare un evento di click a queste immagini.


Gtk lo permette, però non mi ricordo se hai bisogno di crearti dei pulsanti o se puoi usare direttamente le immagini.

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygobject

Messaggioda ZeroUno » lun ott 16, 2017 10:17

Sembra che treeview non lo consente, quindi li ho messi fuori della treeview.

questi sono gli sviluppi attuali, ma mi sono momentaneamente fermato per cominciare a fare il motore del progetto (che ovviamente non è la gui).
edit: nota, in questa versione i pulsanti sono ancora nella treeview; nella nuova versione ho messo due pulsanti laterali; si seleziona la riga e poi si preme up o down.

Tra le altre cose questo programma dovrà scaricare file con wget e mettere una barra di avanzamento.

Pensavo di mettere la wget lanciata in background con & redirezionando l'output su un file e monitorare il file con GObject.timeout_add, ma viene una cosa brutta, cioè la wget ha parentpid=1, cioè lo sgancia da python.
In caso di kill della gui non si ripercuoterà anche sulla wget e comunque è brutto non sapere chi ha lanciato quella wget.
E' brutto anche dover creare un file.

C'è un modo migliore e qualche esempio già fatto?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 2194
Iscritto il: mer mar 05, 2008 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 4.14.0
Desktop: lxde
Località: Pisa
Contatta:

Re: Programmare in pygobject

Messaggioda ponce » lun ott 16, 2017 10:31

non uso python (quindi scusami se dico castronerie), ma guardando in giro vedo che molti usano urllib

https://stackoverflow.com/questions/246 ... via-python

senno' ci sarebbe anche pycurl (gia' incluso in Slackware) ma non so se sia il piu' adatto per il tuo uso

http://pycurl.io/docs/latest/quickstart ... -to-a-file
https://github.com/pycurl/pycurl/blob/m ... est_gtk.py

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5051
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Programmare in pygobject

Messaggioda ZeroUno » lun ott 16, 2017 10:51

purtroppo è mandatorio l'uso del wget di sistema (almeno per ora; sviluppi futuri si vedrà).
E a prescindere dal download mi piacerebbe poter monitorare l'output di programmi esterni (bash o meno) e riportare azioni sulla gui quali soprattutto una barra di scorrimento ma non solo.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111