0

メニューバーとメニューバーにいくつかの項目がある 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)

スニペットのみを示しましたが、私のコードはすべて機能します。私の GUI とメニュー バーは正しく設定されています - wx.FileDialog や wx.FontDialog メニューのようなポップアップ メニューを取得する方法がわかりません。どんな助けでも素晴らしいでしょう!ありがとう

4

1 に答える 1

3

ハンドラー (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()
于 2012-07-12T15:11:16.103 に答える