Portál AbcLinuxu, 5. května 2025 18:54
Dobrý den.
Budu rád, když mi někdo, kdo se vyzná, pomůže.
Nejdřív se prosím podívejte na tento obrázek. Je na něm otevřené menu Soubor editoru Bluefish, nalevo v tomto menu jsou jednotlivé položky a u některých z nich je napravo uvedena klávesová zkratka.
Mám dotaz, který se týká zobrazení klávesových zkratek v menu (tak, jak je to na obrázku): Jak se to dá udělat v Gtk2 nebo Gtk3 Perlu?
Mějme tento kód:
#!/usr/bin/perl use strict; use warnings; use locale; use utf8; use Glib qw(TRUE FALSE); use Gtk3; sub quitf { Gtk3->main_quit(); } Gtk3->init; my $label = Gtk3::Label->new("Hokusy pokusy..."); my $statusbar = Gtk3::Statusbar->new(); my $context_id_label = $statusbar->get_context_id("working_label"); my $message_id_label = $statusbar->push($context_id_label, "Experiment se stavovým řádkem"); my $menu_bar = Gtk3::MenuBar->new(); my $menu_bar_item_hokus = Gtk3::MenuItem->new(); $menu_bar_item_hokus->set_label("Hokus"); my $menu_bar_item_pokus = Gtk3::MenuItem->new(); $menu_bar_item_pokus->set_label("Pokus"); $menu_bar->append($menu_bar_item_hokus); $menu_bar->append($menu_bar_item_pokus); my $menu_hokus = Gtk3::Menu->new(); my $menu_hokus_item_soubor = Gtk3::MenuItem->new(); $menu_hokus_item_soubor->set_label("Soubor"); my $menu_hokus_item_novy = Gtk3::MenuItem->new(); $menu_hokus_item_novy->set_label("Nový"); my $menu_hokus_item_ulozit = Gtk3::MenuItem->new(); $menu_hokus_item_ulozit->set_label("Uložit"); my $menu_hokus_item_zavrit = Gtk3::MenuItem->new(); $menu_hokus_item_zavrit->set_label("Zavřít"); $menu_hokus->append($menu_hokus_item_soubor); $menu_hokus->append($menu_hokus_item_novy); $menu_hokus->append($menu_hokus_item_ulozit); $menu_hokus->append($menu_hokus_item_zavrit); $menu_bar_item_hokus->set_submenu($menu_hokus); my $menu_pokus = Gtk3::Menu->new(); my $menu_pokus_item_napoveda = Gtk3::MenuItem->new(); $menu_pokus_item_napoveda->set_label("Nápověda"); my $menu_pokus_item_oaplikaci = Gtk3::MenuItem->new(); $menu_pokus_item_oaplikaci->set_label("O aplikaci"); $menu_pokus->append($menu_pokus_item_napoveda); $menu_pokus->append($menu_pokus_item_oaplikaci); $menu_bar_item_pokus->set_submenu($menu_pokus); my $vbox = Gtk3::VBox->new(0, 5); $vbox->pack_start($menu_bar, FALSE, FALSE, 0); $vbox->pack_start($label, FALSE, FALSE, 5); $vbox->pack_end($statusbar, FALSE, FALSE, 0); my $window = Gtk3::Window->new("toplevel"); $window->signal_connect("destroy" => sub { &quitf(); }); $window->add($vbox); $window->show_all(); Gtk3->main; __END__
Co do něj přidat, aby se dosáhlo kýženého výsledku?
Mám totiž (jinou) aplikaci, která podporuje různé klávesové zkratky, a já bych je chtěl uvést v hlavním menu u jeho jednotlivých položek, tak, jak je to zvykem.
Předem děkuji za všechny podnětné odpovědi.
Řešení dotazu:
from gi.repository import Gtk, Gdk w = Gtk.Window() w.set_default_size(300, -1) w.connect('destroy', Gtk.main_quit) m = Gtk.MenuBar() w.add(m) i = Gtk.MenuItem() i.set_label('Menu') i.set_accel_path('<main>/Menu') m.add(i) mm = Gtk.Menu() i.set_submenu(mm) mm.set_accel_group(Gtk.AccelGroup()) w.add_accel_group(mm.get_accel_group()) ii = Gtk.MenuItem(label='Text') ii.set_accel_path('<main>/Menu/Test') mm.add(ii) a = Gtk.AccelMap.get() a.add_entry('<main>/Menu/Test', Gdk.KEY_t, Gdk.ModifierType.CONTROL_MASK) w.show_all() Gtk.main()
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.