2017-01-01 8 views
0

私はPythonの新機能ですが、wxpythonを使用したGUIの使用方法を理解したいと思います。私はフレームの作成のためにテンプレートを使用しており、メニューを追加しました。メニューは表示されますが、アクションを引き起こさないので、作成した別のメニュー項目にアクションをバインドする必要があります。問題は、私はどのようにわからない。バインドメニューイベントwxpython

私はメニューを始め、私が使用してアクションを関連付けられている私は「menu_open」と方法

filemenu.Append(wx.ID_OPEN, "Open")

に関連すると呼ばれ、保存:

self.Bind(wx.EVT_MENU, self.Open, menu_open)

をしかし、私はエラーを得た:

AttributeError: 'MainWindow' object has no attribute 'Open'

「OnOpen」属性があるので試してみるとエラーが表示されます:

frame = MainWindow(None, "Sample editor")

AttributeError: 'MainWindow'object has no attribute 'OnOpen'

だから、質問は以下のとおりです。

  1. self.Bind構文が正しいとメニューにアクションを割り当てるための正しい方法ですか?
  2. wxPythonで利用できるメニューの属性の完全なリストはありますか?

参考用にコード全体を報告しています。ありがとう。 G.

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
from __future__ import print_function 

import wx 


class MainWindow(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, title=title, size=(200, 100)) 
     self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) 
     # A Statusbar in the bottom of the window 
     self.CreateStatusBar() 

     # Setting up the menus 
     '''Define main items''' 
     filemenu = wx.Menu() 
     editmenu = wx.Menu() 
     infomenu = wx.Menu() 
     '''Items''' 
     # file menu 
     menu_open = filemenu.Append(wx.ID_OPEN, "Open") 
     filemenu.Append(wx.ID_NEW, "New") 
     filemenu.Append(wx.ID_SAVE, "Save") 
     filemenu.Append(wx.ID_SAVEAS, "Save as") 
     filemenu.Append(wx.ID_EXIT, "Exit") 
     filemenu.AppendSeparator() 
     filemenu.Append(wx.ID_PRINT, "&Print") 
     filemenu.Append(wx.ID_PRINT_SETUP, "Print setup") 
     filemenu.Append(wx.ID_PREVIEW, "Preview") 
     # edit menu 
     editmenu.Append(wx.ID_COPY, "Copy") 
     editmenu.Append(wx.ID_CUT, "Cut") 
     editmenu.Append(wx.ID_PASTE, "Paste") 
     editmenu.AppendSeparator() 
     editmenu.Append(wx.ID_UNDO, "Undo") 
     editmenu.Append(wx.ID_REDO, "Re-do it") 
     # info menu 
     infomenu.Append(wx.ID_ABOUT, "About") 
     '''Bind items for activation''' 
     # bind file menu 
     self.Bind(wx.EVT_MENU, self.OnOpen, menu_open) 

     # Creating the menubar. 
     menuBar = wx.MenuBar() 
     # Add menus 
     menuBar.Append(filemenu, "&File") 
     menuBar.Append(editmenu, "&Edit") 
     menuBar.Append(infomenu, "&Help") 
     # Adding the MenuBar to the Frame content. 
     self.SetMenuBar(menuBar) 
     self.Show(True) 

app = wx.App(False) 
frame = MainWindow(None, "Sample editor") 
app.MainLoop() 

答えて

2

あなたは、単にイベントハンドラメソッドを作成していない

self.Bind(wx.EVT_MENU, self.OnOpen, menu_open) 

を使用するときに、あなたは、私はこれらを考えメインウィンドウ

def OnOpen(self, event): 
    print('OnOpen') 
+0

呼び出されるメソッドがクラスに追加必要'onOpen'などはwx.MENUから派生した標準的なメソッドなので、私はメソッドの完全なリストを探していました... – Gigiux

+0

'wx.Frame'のような様々なウィジェットの標準的なメソッドがいくつかありますが、メニューイベントに自動的にマップする –

+0

オープン、セーブ、別名で保存、新規作成などの標準メニュー項目に必要なアクションのコードを入手するためのリストがありますか? – Gigiux