wxpython menubar без выпадающих элементов - PullRequest
0 голосов
/ 09 февраля 2019

Я использую Python 3.7 с wxPython 4.0.4.Возникла проблема с menuBar, когда я хочу только один кликабельный элемент.Это строка меню с добавленным объектом меню, но в нем нет элементов меню.Там нет выпадающего и нет идентификатора, чтобы связать с.Объект menuBar питается событием onClick.Я просто хочу определить, когда нажимается пункт «Выполнить».Есть ли способ поймать это событие?

1 Ответ

0 голосов
/ 09 февраля 2019

Хотя настоящий ответ должен быть, добавьте пункт меню под названием Run в ваше меню Run, потому что это позволяет пользователю выбрать запуск функции, а не ее случайный запуск, нажав на строку меню, ответДа, вы можете.

Bind к событию wx.EVT_MENU_OPEN

import wx
import wx.stc
class MyApp(wx.App):
    def OnInit(self):
        self.frame = MenuFrame(None, title="Menus and MenuBars")
        self.SetTopWindow(self.frame)
        self.frame.Show()

        return True

ID_READ_ONLY = wx.NewId()

class MenuFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(MenuFrame, self).__init__(*args, **kwargs)

        # Attributes
        self.panel = wx.Panel(self)
        self.txtctrl = wx.stc.StyledTextCtrl(self.panel,
                                   style=wx.TE_MULTILINE)

        # Layout
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(self.txtctrl, 1, wx.EXPAND)
        self.panel.SetSizer(sizer)
        self.CreateStatusBar() # For output display

        # Setup the Menu
        menub = wx.MenuBar()

        # File Menu
        filem = wx.Menu()
        filem.Append(wx.ID_NEW, "New")
        filem.Append(wx.ID_OPEN, "Open")
        filem.Append(wx.ID_SAVE, "Save")
        filem.Append(wx.ID_SAVEAS, "Save_As")
        menub.Append(filem, "&File")

        # Edit Menu
        editm = wx.Menu()
        editm.Append(wx.ID_UNDO, "Undo")
        editm.Append(wx.ID_REDO, "Redo")
        editm.Append(wx.ID_COPY, "Copy")
        editm.Append(wx.ID_CUT, "Cut")
        editm.Append(wx.ID_PASTE, "Paste")
        editm.Append(wx.ID_SELECTALL, "SelectAll")
        editm.AppendSeparator()
        editm.Append(ID_READ_ONLY, "Read Only",
                     kind=wx.ITEM_CHECK)
        menub.Append(editm, "Edit")

        # History Menu
        historym = wx.Menu()
        historym.Append(wx.ID_PREVIEW, "Recent")
        menub.Append(historym, "&History")

        # Help Menu
        helpm = wx.Menu()
        helpm.Append(wx.ID_HELP_INDEX, "Hint")
        helpm.Append(wx.ID_ABOUT, "About")
        menub.Append(helpm, "&Help")

        # Run Menu
        runm = wx.Menu()
        menub.Append(runm,"&Run")

        self.SetMenuBar(menub)

        # Event Handlers
        self.Bind(wx.EVT_MENU, self.OnMenu)
        self.Bind(wx.EVT_MENU_OPEN, self.OnMenu)

    def OnMenu(self, event):
        """Handle menu clicks"""
        evt_id = event.GetId()
        if evt_id == 0:
            obj = event.GetMenu()
            if obj.GetTitle() == "&Run":
                self.txtctrl.AddText('Running program\n')
        else:
            self.txtctrl.AddText("Menu item "+str(evt_id)+" selected\n")

if __name__ == "__main__":
    app = MyApp()
    app.MainLoop()

У вас есть выбор:

  1. EVT_MENU_OPEN: собирается открыть меню.В Windows это отправляется только один раз для каждой навигации по меню (вплоть до закрытия всех меню).
  2. EVT_MENU_CLOSE: Меню было только что закрыто.Обратите внимание, что это событие в настоящее время отправляется до события выбора меню (wxEVT_MENU), если оно есть.
  3. EVT_MENU_HIGHLIGHT: элемент меню с указанным идентификатором выделен: используется для отображения подсказок справки в строке состояния с помощью wx.Frame
  4. EVT_MENU_HIGHLIGHT_ALL: пункт меню выделен, т. Е. Выбранный в данный момент пункт меню изменился.

Тем не менее, я по-прежнему считаю, что вам следует добавить меню Runпункт в Run меню enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...