【问题标题】:wxPython and add Options Menu when select in Menu BarwxPython 并在菜单栏中选择时添加选项菜单
【发布时间】:2012-07-12 08:28:35
【问题描述】:

我已经设置了一个 wxpython GUI,它有一个菜单栏和菜单栏中的一些项目。我想做的是在我的菜单栏中选择一个项目(例如文件 - 选项),当我选择“选项”时会弹出一个对话框,我可以在其中设置不同的代码参数。类似的行为是 wx.FontDialog 和 wx.FileDialog——但是,我希望我的行为是自定义的,因为我可以将单选按钮和复选框作为可选选项。我该怎么做呢?

我的代码片段是:

这里是我设置部分主应用程序和 GUI 的地方(我在另一部分设置了布局和框尺寸器):

class TMainForm(wx.Frame):

    def __init__(self, *args, **kwds):

            kwds["style"] = wx.DEFAULT_FRAME_STYLE
            wx.Frame.__init__(self, *args, **kwds)
            self.Splitter = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER)
            self.PlotPanel = wx.Panel(self.Splitter, -1)
            self.FilePanel = wx.Panel(self.Splitter, -1)
            #self.SelectionPanel = wx.Panel(self.Splitter,-1)
            self.Notebook = wx.Notebook(self.FilePanel, -1)#, style=0)
            self.ReportPage = wx.Panel(self.Notebook, -1)
            self.FilePage = wx.Panel(self.Notebook, -1)

这里是我设置部分菜单栏的地方:

            self.MainMenu = wx.MenuBar()
            self.FileMenu = wx.Menu()
            self.OptimizeMenu = wx.Menu()
            self.HelpMenu = wx.Menu()
            self.OptimizeOptions= wx.MenuItem(self.OptimizeMenu, 302, "&Select Parameters","Select Parameters for Optimization",wx.ITEM_NORMAL)
            self.OptimizeMenu.AppendItem(self.OptimizeOptions)

            self.MainMenu.Append(self.OptimizeMenu, "&Optimization")

在这里,我将一个事件绑定到我的菜单栏的“选项”部分。当我点击它时,我希望显示一个弹出菜单对话框

self.Bind(wx.EVT_MENU, self.OnOptimizeOptions, self.OptimizeOptions)

这是我希望定义弹出菜单的功能。如果可能的话,我想以这种格式来做(而不是做单独的课程)。

def OnOptimizeOptions(self,event):
        give me a dialog box (radio buttons, check boxes, etc)

我只展示了 sn-ps,但我所有的代码都可以工作。我的 GUI 和菜单栏设置正确 - 我只是不知道如何获得像 wx.FileDialog 和 wx.FontDialog 菜单这样的弹出菜单。任何帮助都会很棒!谢谢

【问题讨论】:

    标签: python dialog wxpython menubar


    【解决方案1】:

    您可能希望在处理程序 (OnOptimizeOptions) 中实例化一个对话框。基本上你会继承 wx.Dialog 并放入你想要的任何小部件。然后你会在你的处理程序中实例化它并调用 ShowModal。像这样的伪代码:

    myDlg = MyDialog(*args)
    myDlg.ShowModal()
    

    有关示例,请参阅 zetcodes 网站上的自定义对话框部分:http://zetcode.com/wxpython/dialogs/(靠近底部)。

    编辑 - 这是一个例子:

    import wx
    
    ########################################################################
    class MyDialog(wx.Dialog):
        """"""
    
        #----------------------------------------------------------------------
        def __init__(self):
            """Constructor"""
            wx.Dialog.__init__(self, None, title="Options")
    
            radio1 = wx.RadioButton( self, -1, " Radio1 ", style = wx.RB_GROUP )
            radio2 = wx.RadioButton( self, -1, " Radio2 " )
            radio3 = wx.RadioButton( self, -1, " Radio3 " )
    
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(radio1, 0, wx.ALL, 5)
            sizer.Add(radio2, 0, wx.ALL, 5)
            sizer.Add(radio3, 0, wx.ALL, 5)
    
            for i in range(3):
                chk = wx.CheckBox(self, label="Checkbox #%s" % (i+1))
                sizer.Add(chk, 0, wx.ALL, 5)
            self.SetSizer(sizer)
    
    
    ########################################################################
    class MyForm(wx.Frame):
    
        #----------------------------------------------------------------------
        def __init__(self):
            wx.Frame.__init__(self, None, wx.ID_ANY, "wx.Menu Tutorial")
    
            # Add a panel so it looks the correct on all platforms
            self.panel = wx.Panel(self, wx.ID_ANY)
    
            menuBar = wx.MenuBar()
            fileMenu = wx.Menu()
    
            optionsItem = fileMenu.Append(wx.NewId(), "Options", 
                                          "Show an Options Dialog")
            self.Bind(wx.EVT_MENU, self.onOptions, optionsItem)
    
            exitMenuItem = fileMenu.Append(wx.NewId(), "Exit",
                                           "Exit the application")
            self.Bind(wx.EVT_MENU, self.onExit, exitMenuItem)
    
            menuBar.Append(fileMenu, "&File")
            self.SetMenuBar(menuBar)
    
        #----------------------------------------------------------------------
        def onExit(self, event):
            """"""
            self.Close()
    
        #----------------------------------------------------------------------
        def onOptions(self, event):
            """"""
            dlg = MyDialog()
            dlg.ShowModal()
            dlg.Destroy()
    
    #----------------------------------------------------------------------
    # Run the program
    if __name__ == "__main__":
        app = wx.PySimpleApp()
        frame = MyForm().Show()
        app.MainLoop()
    

    【讨论】:

    • 对不起,我对 wxpython 很陌生。你对子类 wx.Dialog 说——这是否意味着类似于 class Example(wx.Frame) 和下面的所有 defs?我不确定myDlg = MyDialog(*args) 正在寻找什么。我对类的主要不了解之一是def main(): ex = wx.App() Example(None) ex.MainLoop() 的使用您能否提供更多详细信息-我非常有兴趣进一步了解并正确使用它
    • 我添加了一个可以帮助你的例子
    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2013-10-27
    • 2013-04-23
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多