2016-08-21 12 views
0

我幾乎完成了我的wxPython音板,並希望實現一個快速功能。wxPython:Soundboard面板[現在玩]就像在winamp

如何將另一個面板添加到wxPython窗口,以及如何實現該面板中的[NOW PLAYING]文本。

這是到目前爲止我的代碼: 進口WX 進口OS 進口pygame的

pygame.init() 

##SOUNDS## 
##SOUNDS## 


class windowClass(wx.Frame): 
    __goliathwav = pygame.mixer.Sound("goliath.wav") 
    __channelopen = pygame.mixer.Sound("channelopen.wav") 

    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() 
     aboutButton = wx.Menu() 
     exitItem = fileButton.Append(wx.ID_EXIT, 'Exit','status msg...') 
     aboutItem = aboutButton.Append(wx.ID_ABOUT, "About") 



      menuBar.Append(fileButton, 'File') 
      menuBar.Append(aboutButton, 'About this program') 

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

      self.__sound_dict = { "Goliath" : self.__goliathwav, 
           "Goliath2" : self.__channelopen 
           } 

      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) 
      textarea = wx.TextCtrl(self, -1, 
             style=wx.TE_MULTILINE|wx.BORDER_SUNKEN|wx.TE_READONLY| 
          wx.TE_RICH2, size=(250,150)) 
    self.usertext = textarea 





    #self.__list2 = wx.ListBox(panel,pos=(19.5,180), size=(251,21)) #second panel 
    #for j in self.__sound_list: 
    # self.__list2.Append(i) 
    #self.__list2.Bind(wx.EVT_LISTBOX,self.__on_click) 


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

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

def __onmenuhelpabout(self,event): 
    dialog = wx.Dialog(self, -1, "[Soundboard]") # , 
         #style=wx.DIALOG_MODAL | wx.STAY_ON_TOP) 
    dialog.SetBackgroundColour(wx.WHITE) 
    panel = wx.Panel(dialog, -1) 
    panel.SetBackgroundColour(wx.WHITE) 
    panelSizer = wx.BoxSizer(wx.VERTICAL) 
    boldFont = wx.Font(panel.GetFont().GetPointSize(), 
         panel.GetFont().GetFamily(), 
         wx.NORMAL,wx.BOLD) 
    lab1 = wx.StaticText(panel, -1, " SOUNDBOARD ") 
    lab1.SetFont(wx.Font(36,boldFont.GetFamily(), wx.ITALIC, wx.BOLD)) 
    lab1.SetSize(lab1.GetBestSize()) 

    imageSizer = wx.BoxSizer(wx.HORIZONTAL) 
    imageSizer.Add(lab1, 0, wx.ALL | wx.ALIGN_CENTRE_VERTICAL, 5) 

    lab2 = wx.StaticText(panel, -1, "Created by youonlylegoonce(cyrex)(Kommander000) for the glory " + \ 
            "of the republic.") 
    panelSizer.Add(imageSizer, 0, wx.ALIGN_CENTRE) 
    panelSizer.Add((10, 10)) # Spacer. 
    panelSizer.Add(lab2, 0, wx.ALIGN_CENTRE) 
    panel.SetAutoLayout(True) 
    panel.SetSizer(panelSizer) 
    panelSizer.Fit(panel) 

    topSizer = wx.BoxSizer(wx.HORIZONTAL) 
    topSizer.Add(panel, 0, wx.ALL, 10) 

    dialog.SetAutoLayout(True) 
    dialog.SetSizer(topSizer) 
    topSizer.Fit(dialog) 

    dialog.Centre() 

    btn = dialog.ShowModal() 
    dialog.Destroy() 





def __on_click(self,event): 
    event.Skip() 
    name = self.__sound_list[self.__list.GetSelection()] 
    sound = self.__sound_dict[name] 
    print("[ NOW PLAYING ] ... %s" % name) 
    pygame.mixer.Sound.play(sound) 


def __quit(self, e): 
    self.Close() 

def main(): 
    app = wx.App() 
    windowClass(None, -1, style=wx.MAXIMIZE_BOX | wx.CAPTION | wx.CENTRE) 
    app.MainLoop() 

main() 
+0

你的意思是一個子窗口?你必須創建一個'wxFrame'對象。 –

+0

@Fabre,當你點擊選擇時,更像是同一個窗口中的[NOW PLAYING]面板 – kommander0000

回答

0

前:

print("[ NOW PLAYING ] ... %s" % name) 

輸入:

self.usertext.SetValue("[ NOW PLAYING ] ... %s" % name) 

附:你的縮進是一團糟