2014-12-31 59 views
1

我試圖通過單擊按鈕在wxpanel中創建一個新框架。通過事件創建一個wxpython滾動窗口(框架)

下面是我的代碼。 它不起作用。 滾動條不顯示。

任何人都可以幫助我嗎?謝謝!

(更新:一個按鈕,在新窗口中添加)

import wx 

class ftest(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, 
          "test Panel", size=(800, 500), pos=(0,0)) 
     self.MainPanel = wx.Panel(self, wx.ID_ANY) 
     self.btn1 = wx.Button(self.MainPanel, pos=(50,100), label="New Frame") 
     self.btn1.Bind(wx.EVT_BUTTON, self.newFrame) 

    def newFrame(self, event): 
     self.new_window = wx.Frame(self, title='frame2', size=(500, 500), pos=(800,0)) 
     self.new_window.Show() 
     self.scroll = wx.ScrolledWindow(self.new_window, -1) 
     self.scroll.SetScrollbars(1, 1, 1600, 1400) 
     self.btn2 = wx.Button(self.new_window, pos=(50,100), label="button2") 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = ftest() 
    frame.Show() 
    app.MainLoop() 

(更新2) 基於Joran比斯利的代碼,

此代碼創建滾動條,但按鈕2未顯示。 和滾動時文本小部件無法正常工作。

import wx 

class ftest(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, 
          "test Panel", size=(800, 500), pos=(0,0)) 
     self.MainPanel = wx.Panel(self, wx.ID_ANY) 
     self.btn1 = wx.Button(self.MainPanel, pos=(50,100), label="New Frame") 
     self.btn1.Bind(wx.EVT_BUTTON, self.newFrame) 

    def newFrame(self, event): 
     self.new_window = wx.Frame(self, title='frame2', pos=(800,0)) 
     self.scroll = wx.ScrolledWindow(self.new_window, -1,size=(500,500)) 
     self.scroll.SetScrollbars(1, 1, 1600, 1400) 
     self.new_window.Layout() 
     self.new_window.Fit() 
     self.new_window.Show() 
     self.btn2 = wx.Button(self.new_window, pos=(50,100), label="button2") 
     wx.StaticText(self.new_window, -1, 'test text', pos=(50, 200)) 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = ftest() 
    frame.Show() 
    app.MainLoop() 

(更新3) 我發現我錯了。這些小部件應該位於滾動對象上,而不是框架對象上。 Layout()和Fit()不是必需的。 所以正確的代碼是

import wx 

class ftest(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, 
          "test Panel", size=(800, 500), pos=(0,0)) 
     self.MainPanel = wx.Panel(self, wx.ID_ANY) 
     self.btn1 = wx.Button(self.MainPanel, pos=(50,100), label="New Frame") 
     self.btn1.Bind(wx.EVT_BUTTON, self.newFrame) 

    def newFrame(self, event): 
     self.new_window = wx.Frame(self, title='frame2', pos=(800,0),size=(500,500)) 
     self.scroll = wx.ScrolledWindow(self.new_window, -1) 
     self.scroll.SetScrollbars(1, 1, 1600, 1400) 
     #self.new_window.Layout() 
     #self.new_window.Fit() 
     self.new_window.Show() 
     self.btn2 = wx.Button(self.scroll, pos=(50,100), label="button2") 
     wx.StaticText(self.scroll, -1, 'test text', pos=(50, 200)) 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = ftest() 
    frame.Show() 
    app.MainLoop() 
+1

你能解釋「不起作用「? – rapvelopment

+0

您的代碼對我來說工作正常,這意味着它會彈出一個標記爲「測試面板」的窗口,並在其上標記爲「新建」的按鈕。點擊該按鈕後,將出現一個標有「frame2」的新窗口 – stochastic

+0

它打開一個新框架,但沒有滾動條。我無法在此上傳圖片。所以我把我的圖片放在我的谷歌驅動器中。請點擊此,https://drive.google.com/file/d/0B5FAgE3R3ldRck4xM2UtY3htZ28/view?usp=sharing – vandy

回答

1
def newFrame(self, event): 
    self.new_window = wx.Frame(self, title='frame2', size=(500, 500), pos=(800,0)) 

    self.scroll = wx.ScrolledWindow(self.new_window, -1) 
    self.scroll.SetScrollbars(1, 1, 1600, 1400) 
    self.new_window.Layout() 
    self.new_window.Fit() 
    self.new_window.Show() 

你需要佈置新的窗口......因爲你顯然希望它填補了500,500區,你將需要使用施膠劑

def newFrame(self, event): 
    self.new_window = wx.Frame(self, title='frame2', size=(500, 500), pos=(800,0)) 
    sz = wx.BoxSizer() 
    sz.SetMinSize((500,500)) #force minimum size 
    self.scroll = wx.ScrolledWindow(self.new_window, -1) 
    sz.Add(self.scroll,1,wx.EXPAND) 
    self.scroll.SetScrollbars(1, 1, 1600, 1400) 
    self.new_window.SetSizer(sz) 
    self.new_window.Layout() 
    self.new_window.Fit() 
    self.new_window.Show() 

或只是強制包含的滾動窗口的大小(這是你通常爲滾動窗口所做的)

def newFrame(self, event): 
    self.new_window = wx.Frame(self, title='frame2', pos=(800,0)) 

    self.scroll = wx.ScrolledWindow(self.new_window, -1,size=(500,500)) 
    self.scroll.SetScrollbars(1, 1, 1600, 1400) 
    self.new_window.Layout() 
    self.new_window.Fit() 
    self.new_window.Show() 
+0

感謝您的回答。它創建一個滾動條窗口,但大小不是(500,500),如果我添加一個按鈕,self.btn2 = wx.Button(self.new_window,pos =(50,100),label =「button2」)你的代碼,它會再次被破壞。 – vandy

+0

看到新的編輯...應該強制它填補空間 –

+0

感謝您的第二個答案!,但如果我添加一個按鈕對象,當我滾動它表現奇怪。 – vandy