ImageMenuItem
은 GTK3에서 사용되지 않으므로 대체품을 찾고 있습니다. 나는 대신 MenuItem
을 간단히 사용하려고 시도했으며 Image
과 AccelLabel
을 그 안에 넣었다. (아래 예 참조). 전체적으로 작동하지만 여전히 두 가지 문제가 있습니다.ImageMenuItem 대체품
- 가속기 키가 메뉴 항목에 표시되지 않습니다.
- 아이콘에 큰 여백이 있습니다. 다음 예에서
은 File|Open
항목이 File|New
항목이 MenuItem
과 같은 결과를 얻을 나의 시도였다 반면되지 않는 ImageMenuItem
로 만들었습니다.
MenuItem
은 무엇이 누락되어 ImageMenuItem
처럼 보이나요?
class Program {
public static void Main()
{
Gtk.Application.Init();
var win = new Gtk.Window("test");
var mb = new Gtk.MenuBar();
var accels = new Gtk.AccelGroup();
win.AddAccelGroup(accels);
var fileMenu = new Gtk.MenuItem("File");
mb.Add(fileMenu);
var fileSubmenu = new Gtk.Menu();
fileMenu.Submenu = fileSubmenu;
//
// File | New
//
var fileNew = new Gtk.MenuItem();
fileSubmenu.Add(fileNew);
fileNew.AddAccelerator(
"activate", accels,
new Gtk.AccelKey(Gdk.Key.n, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible));
fileNew.Activated += (s,e) => System.Console.WriteLine("New ...");
var fileNewIcon = new Gtk.Image();
fileNewIcon.SetFromIconName("document-new", Gtk.IconSize.Menu);
var fileNewLabel = new Gtk.AccelLabel("New");
fileNewLabel.AccelWidget = fileNew;
var hbox = new Gtk.HBox(false, 4);
hbox.PackStart(fileNewIcon, false, false, 0);
hbox.PackStart(fileNewLabel, false, false, 0);
fileNew.Add(hbox);
//
// File | Open
//
var fileOpen = new Gtk.ImageMenuItem("Open", accels);
var fileOpenIcon = new Gtk.Image();
fileOpenIcon.SetFromIconName("document-open", Gtk.IconSize.Menu);
fileOpen.Image = fileOpenIcon;
fileOpen.AddAccelerator(
"activate", accels,
new Gtk.AccelKey(Gdk.Key.o, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible));
fileOpen.Activated += (s,e) => System.Console.WriteLine("Open ...");
fileSubmenu.Add(fileOpen);
win.Add(mb);
win.ShowAll();
win.DeleteEvent += (s,e) => Gtk.Application.Quit();
Gtk.Application.Run();
}
}
'fileSubmenu.ReserveToggleSize = false;가 작동 중입니다. 하지만 액셀러레이터 ('fileNewLabel.Xalign = 0.0f;')는 표시되지 않습니다 ... –
죄송합니다, hboy에 항목을 다르게 추가하고 놓친 것을 놓쳤습니다. – Kyto
흠 ... 작동하지 않습니다. 나는 상자의 포장이 액셀러레이터 키의 가시성과 관련이 있는지 이해하지 못한다. –