2016-08-20 9 views
0

wxPythonパッケージを使用してすばやく汚れたサウンドボードを作成しています。再生するサウンドのスクロールリストを実装する方法が不思議でした。ここでwxPython:パネルを使用したサウンドボードの作成

は、私が伝えるためにしようとしています何の絵です: http://i.imgur.com/av0E5jC.png

、ここでは、これまでの私のコードです:

import wx 

class windowClass(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     super(windowClass,self).__init__(*args,**kwargs) 
     self.basicGUI() 
    def basicGUI(self): 
     panel = wx.Panel(self) 
     menuBar = wx.MenuBar() 
     fileButton = wx.Menu() 
     editButton = wx.Menu() 
     exitItem = fileButton.Append(wx.ID_EXIT, 'Exit','status msg...') 

     menuBar.Append(fileButton, 'File') 
     menuBar.Append(editButton, 'Edit') 

     self.SetMenuBar(menuBar) 
     self.Bind(wx.EVT_MENU, self.Quit, exitItem) 

     wx.TextCtrl(panel,pos=(10,10), size=(250,150)) 

     self.SetTitle("Soundboard") 
     self.Show(True) 
    def Quit(self, e): 
     self.Close() 
def main(): 
    app = wx.App() 
    windowClass(None) 
    app.MainLoop() 


main() 

私の質問はどのように1は、上の音のリストをロードしない、残りますそのパネルをクリックして特定のボタンをクリックしてそのサウンドを再生します。私は本当に素早いサウンドファイルを再生するだけなので、一時停止と早送りの機能を実装するのは本当に気にしません。

ありがとうございます。

答えて

0

リストボックスで置き換えられたテキストウィジェットを削除して、項目クリックでコールバックをフックしました。ちょっと丁寧です:クリックすると項目の位置が見つけられ、ラベル名が取得されて辞書にファイル名が取り込まれます

私はコードをリファクタリングしてコールバックやその他の属性をプライベートにして、ライズビリティを助けるようにしました。

import wx 

class windowClass(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     super(windowClass,self).__init__(*args,**kwargs) 
     self.__basicGUI() 
    def __basicGUI(self): 
     panel = wx.Panel(self) 
     menuBar = wx.MenuBar() 
     fileButton = wx.Menu() 
     editButton = wx.Menu() 
     exitItem = fileButton.Append(wx.ID_EXIT, 'Exit','status msg...') 

     menuBar.Append(fileButton, 'File') 
     menuBar.Append(editButton, 'Edit') 

     self.SetMenuBar(menuBar) 
     self.Bind(wx.EVT_MENU, self.__quit, exitItem) 

     self.__sound_dict = { "a" : "a.wav","b" : "b.wav","c" : "c2.wav"} 
     self.__sound_list = sorted(self.__sound_dict.keys()) 

     self.__list = wx.ListBox(panel,pos=(20,20), size=(250,150)) 
     for i in self.__sound_list: self.__list.Append(i) 
     self.__list.Bind(wx.EVT_LISTBOX,self.__on_click) 

     #wx.TextCtrl(panel,pos=(10,10), size=(250,150)) 

     self.SetTitle("Soundboard") 
     self.Show(True) 

    def __on_click(self,event): 
     event.Skip() 
     name = self.__sound_list[self.__list.GetSelection()] 
     filename = self.__sound_dict[name] 
     print("now playing %s" % filename) 

    def __quit(self, e): 
     self.Close() 
def main(): 
    app = wx.App() 
    windowClass(None) 
    app.MainLoop() 

main() 
+0

Fabre、__listやsound_listなどの組み込み関数をどのように呼び出すのですか、それとも特定の変数を入力するのですか? – kommander0000

+0

二重アンダースコア接頭辞は、組み込み関数( '__init__'のように2つの末尾にアンダースコアがあることになります)とは関係ありませんが、メンバを非公開にします。私は例を更新しました。 –

関連する問題