wxpython:如何直接从菜单栏打开对话框

迪特克

我试图找到一种方法来从 MenuBar 打开 wx.Dialog 而不先点击 MenuEntry。

例子:


class Custom_MenuBar(wx.MenuBar):
    def __init__(self, parent, style=0):
        wx.MenuBar.__init__(self, style)

        # About-Menu
        aboutmenu = wx.Menu()
        about_id = wx.Window.NewControlId()
        aboutmenu.Append(about_id, "&About", "show About-Menu")
        self.Bind(wx.EVT_MENU, self._about, id=about_id)
        self.Append(aboutmenu, "About Menu")

        # Menubar aktivieren
        parent.SetMenuBar(self)

    def _about(self, _event):
        wx.adv.AboutBox(wx.adv.AboutDialogInfo())

此示例(以框架为父级)显示了一个带有“关于菜单”条目的菜单栏。单击此条目会显示一个名为“About”的 MenuItem,最后单击“About”会打开 AboutBox。

我想在菜单项上点击一下,而不是在激活“关于菜单”时直接打开关于框。

一个想法是从 wx.Menu 派生,但由于 wx.Menu 不是从 wx.Window 继承的,我没有找到要绑定到的 Id。我的问题是:当在 MenuBar 中单击条目(“关于菜单”)时,从事件的角度来看会发生什么?然后打开一个菜单?有干扰的可能吗?还有其他想法吗?

PS:使用 python 3.8.0 和 wxPython 4.0.7.post2

萨克森州的罗尔夫

您有多种选择,具体取决于您想要实现的目标。
使用菜单事件选项,您可以使用菜单的 Id 或文本,如果没有 Id( menu open )。下面显示了最明显的选项。

import wx
import wx.stc
import wx.adv
class MyApp(wx.App):
    def OnInit(self):
        self.frame = MenuFrame(None, title="Menu Dialogue")
        self.SetTopWindow(self.frame)
        self.frame.Show()

        return True

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
        menu = 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")
        menu.Append(filem, "&File")

        # About Menu
        aboutm = wx.Menu()
        self.about_id = wx.NewIdRef()
        aboutm.Append(self.about_id, "&About Info", "Show About-Menu")
        menu.Append(aboutm,"&About")

        self.SetMenuBar(menu)

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

    def OnMenu(self, event):
        evt_id = event.GetId()
        if evt_id == self.about_id:
            info = wx.adv.AboutDialogInfo()
            info.SetDescription("Menu Clicked "+str(evt_id)+" selected\n")
            wx.adv.AboutBox(info)

    def OnMenuOpen(self, event):
        evt_id = event.GetId()
        Dlg = False
        if evt_id == 0:
            obj = event.GetMenu()
            if obj.GetTitle() == "&About":
                Dlg = True
        if Dlg:
            info = wx.adv.AboutDialogInfo()
            info.SetDescription("Menu Opened "+str(evt_id)+" selected\n")
            wx.adv.AboutBox(info)

    def OnMenuHighlight(self, event):
        evt_id = event.GetId()
        if evt_id == self.about_id:
            info = wx.adv.AboutDialogInfo()
            info.SetDescription("Menu Highlight "+str(evt_id)+" selected\n")
            wx.adv.AboutBox(info)

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

单击菜单栏上的jQuery对话框作为登录框打开

wxpython:打开对话框时如何访问窗口

打开对话框时如何隐藏导航栏?

如何动态替换wxpython中的菜单栏?

如何保持对话框打开

如何从 MenuBar QML 打开对话框

wxPython中的菜单栏错误对齐

在Google Shreadsheet中,我创建了一个新菜单,该菜单打开一个对话框和一个侧边栏。我希望能够从侧边栏打开对话框

如何从每个页面中的导航栏组件的按钮打开模态/对话框反应

如何在Flutter中打开侧边菜单栏?

如何使用菜单栏在屏幕上打开NSWindow

如何停止用Cmd + C关闭的wxPython对话框

如何在Android中的特定位置而不是菜单对话框中打开上下文菜单

从组件外部触发打开全屏对话框工作,打开时如何关闭对话框

如何使用“打开文件”对话框打开文件

如何更改打开对话框的图像以及如何自定义对话框?

如何通过仅使用 Python 和 Selenium 直接上传文件来避免打开文件对话框?

打开目录对话框

打开对话框的命令

打开对话框的问题

如何从上次打开的对话框的按钮单击中删除所有对话框?

如何防止“如何打开此文件”对话框?

如何使用Matlab从菜单中调用对话框?

如何从对话框和菜单复制文本?

如何在对话框菜单中列出分区?

wxpython 中的打印对话框错误

如何删除警报对话框标题栏

如何从对话框中删除操作栏

如何从反应中的函数打开对话框?