Pagina 2 di 2

Re: Programmare in pygtk

Inviato: mer 4 ott 2017, 10:41
da ZeroUno
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.

Re: Programmare in pygtk

Inviato: gio 5 ott 2017, 0:33
da ZeroUno
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 11044 volte

Re: Programmare in pygtk

Inviato: gio 5 ott 2017, 8:27
da lablinux
beh non è male. Non credo si possa fare molto meglio con pygtk.
Dai un'occhiata a kyvi, si installa in python con pip.

Re: Programmare in pygtk

Inviato: gio 5 ott 2017, 8:31
da ZeroUno
Solo non mi piacciono quei pulsanti on/off così grandi.

Re: Programmare in pygtk

Inviato: gio 5 ott 2017, 14:06
da brg
Ti consiglio di leggerti le linee guida di gnome per la progettazione di interfacce:
https://developer.gnome.org/hig/stable/ ... ut.html.en .

Re: Programmare in pygobject

Inviato: gio 5 ott 2017, 22:52
da ZeroUno
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 10972 volte
lasciate stare i bordi e la scritta al centro... è un bug di ksnapshot :)

Re: Programmare in pygobject

Inviato: ven 6 ott 2017, 23:28
da ZeroUno
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?

Re: Programmare in pygobject

Inviato: sab 7 ott 2017, 10:19
da brg
Una bella applicazione multithread.

Re: Programmare in pygobject

Inviato: sab 7 ott 2017, 16:17
da ZeroUno
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 ?

Re: Programmare in pygobject

Inviato: lun 9 ott 2017, 19:17
da ZeroUno
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

Re: Programmare in pygobject

Inviato: mar 10 ott 2017, 15:04
da ZeroUno
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ò?

Re: Programmare in pygobject

Inviato: lun 16 ott 2017, 9:44
da brg
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.

Re: Programmare in pygobject

Inviato: lun 16 ott 2017, 10:17
da ZeroUno
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?

Re: Programmare in pygobject

Inviato: lun 16 ott 2017, 10:31
da ponce
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

Re: Programmare in pygobject

Inviato: lun 16 ott 2017, 10:51
da ZeroUno
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.