2012-07-12 150 views
0

我已经设置了一个wxpython图形用户界面,菜单栏和菜单栏中的一些项目。我想要做的是在我的菜单栏中选择一个项目(例如文件 - 选项),当我选择“选项”时,弹出一个对话框,我可以在其中设置不同的参数。类似的行为将是wx.FontDialog和wx.FileDialog - 然而,我想我的自定义,我可以有单选按钮和复选框作为可选择的选项。我该怎么做呢?我的代码wxPython并在菜单栏中选择时添加选项菜单

摘录如下:

这里是我设置的主要应用和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) 

我只显示片段,但我所有的代码都能正常工作。我的GUI和菜单栏设置正确 - 我只是不知道如何获得弹出式菜单,如wx.FileDialog和wx.FontDialog菜单。任何帮助将是伟大的!谢谢

回答

2

你会想在你的处理程序(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() 
+0

对不起,我是很新,wxPython的。你说的子类wx.Dialog - 这是否意味着类示例(wx.Frame),然后在这个下面的所有defs?我不确定'myDlg = MyDialog(* args)'是什么意思。我不了解类的主要事情之一是使用'def main(): ex = wx.App() 示例(无) ex.MainLoop()'您可以提供更多详细信息 - 我非常有兴趣了解这一点,并正确使用它 – mcfly 2012-07-12 16:56:03

+0

我添加了一个应该帮助你的例子 – 2012-07-12 18:45:26