2013-01-23 70 views
1

我在創建一個界面,並且需要點擊一個按鈕打開一個新窗口。 所以我創建了主窗口,並創建了所有的按鈕,並在一個類下創建了新窗口。我不完全確定是否需要這樣做,但我也會包含這些信息。如果它充滿了錯誤,python新手如此抱歉。WxPython - 用按鈕打開一個新窗口

如果有人也可以在打開另一個窗口時回答如何隱藏主菜單,那就太棒了。乾杯。

import wxversion 
wxversion.select("2.8") 
import wx 

class App(wx.App): 

def OnInit(self): 
    frame = window() 
    frame.Show() 
    self.SetTopWindow(frame) 
    return True 

class window(wx.Frame): 

title = "Main Menu" 

def __init__(self,parent,id): 
    wx.Frame.__init__(self,parent,id,'Window', size=(1000,700)) 
    panel=wx.Panel(self, -1) 

    self.SetBackgroundColour(wx.Colour(100,100,100)) 
    self.Centre() 
    self.Show() 

    status=self.CreateStatusBar() 

    menubar=wx.MenuBar() 
    filemenu=wx.Menu() 
    exitmenu = filemenu.Append(wx.NewId(),"Exit", "Exit Program") 

    menubar.Append(filemenu,"File") 
    self.Bind(wx.EVT_MENU, self.onExit, exitmenu) 
    self.SetMenuBar(menubar) 

    font1 = wx.Font(30, wx.MODERN, wx.NORMAL, wx.NORMAL, False, u'Consolas') 

    Text1=wx.StaticText(panel, -1, "Rhythm Trainer", (10,15)) 
    Text1.SetFont(font1) 
    Text1.SetForegroundColour('white') 
    self.Show(True) 

    btn1 = wx.Button(panel, label='Basic', pos=(100,200), size=(150, 50)) 
    btn1.SetFont(wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, u'Consolas')) 

    btn1.Bind(wx.EVT_BUTTON, window2) 

    btn2 = wx.Button(panel, label='Advanced', pos=(100,270), size=(150, 50)) 
    btn2.SetFont(wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, u'Consolas')) 

    btn3 = wx.Button(panel, label='Notations', pos=(100,340), size=(150, 50)) 
    btn3.SetFont(wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, u'Consolas')) 

    btn4 = wx.Button(panel, label='Settings', pos=(100,410), size=(150, 50)) 
    btn4.SetFont(wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, u'Consolas')) 

    btn5 = wx.Button(panel, label="Quit", pos=(820, 550), size=(150, 50)) 
    btn5.SetFont(wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, u'Consolas')) 
    self.Bind(wx.EVT_BUTTON, self.OnClick, btn5) 


def OnClick(self, event): 
    self.Close() 

def OnQuitButton(self, event): 

    wx.Sleep(1) 
    self.Destroy() 

def onExit(self, event): 
    self.Destroy() 

def newwindow(self, event): 
    window2.show 


class window2(wx.Frame): 

title = "new Window" 

def __init__(self,parent,id): 
    wx.Frame.__init__(self, id,'Window2', size=(1000,700)) 
    panel=wx.Panel(self, -1) 

    self.SetBackgroundColour(wx.Colour(100,100,100)) 
    self.Centre() 
    self.Show() 


if __name__=='__main__': 
    app=wx.PySimpleApp() 
    frame=window(parent=None,id=-1) 
    frame.Show() 
    app.MainLoop() 

回答

5

如果你想要做的就是隱藏第一幀,並顯示第二,我寫了一個教程正是對我的blog

如果你不關心第一幀是否與第二幀一起仍在屏幕上,那麼在你的onClick方法中,你需要實例化第二個窗口並顯示它。類似這樣的:

secondWindow = window2() 
secondWindow.Show() 

不要關閉第一幀!這將結束整個腳本。你只想關閉,當你想要退出整個程序。

+0

謝謝,我會檢查出來,我會回來的結果! – Chudboy

+0

啊,謝謝你的OnClick方法!這使它工作,沒有錯誤。之前我得到了__init__參數錯誤。但是我放錯了secondWindow = Window 2行。儘管如此,我一定會詳細討論隱藏主菜單的帖子。這將是必要的!乾杯! – Chudboy

+0

主菜單不應該是第二個窗口的一部分,除非您已將它附加到該窗口。 –