2013-02-25 32 views
3

我需要在wxpython中點擊一個按鈕(與主窗口物理分離)創建一個額外的新窗口。我想在不關閉最後一個窗口的情況下這樣做。如何在wxpython中點擊一個按鈕來創建額外的窗口

這是我到目前爲止有:

class Prototype(wx.Frame): 
    def __init__(self, parent, title): 
      wx.Frame.__init__(self, None, size=(1240,705)) 
      self.UI() 
      self.Centre() 
      self.Show() 

    def UI(self): 
      self.panel1 = wx.Panel(self, -1) 
      self.sizer = wx.BoxSizer() 
      self.sizer.Add(self.panel1, 1, flag=wx.EXPAND) 
      b = wx.Button(self.panel1, label='second window', size=(180,100), pos=(650,25)) 
      b.Bind(wx.EVT_BUTTON, self.OnB)   

      self.panel2 = wx.Panel(self, -1) 
      self.sizer.Add(self.panel2,1,flag=wx.EXPAND) 
      self.panel2.Hide() 
      self.panel2.SetSizer(self.vbox) 
      self.SetSizer(self.sizer) 

    def OnB(self, event): 
      self.panel2.Show() 
      self.sizer.Layout() 

app = wx.App() 
Prototype(None, title='') 
app.MainLoop() 

回答

3

這裏有一個工作示例:

import wx 

######################################################################## 
class SecondFrame(wx.Frame): 
     """""" 

     #---------------------------------------------------------------------- 
     def __init__(self): 
      """Constructor""" 
      wx.Frame.__init__(self, None, title="Second Frame") 
      panel = wx.Panel(self) 
      txt = wx.StaticText(panel, label="I'm the second frame!") 

######################################################################## 
class Prototype(wx.Frame): 

     #---------------------------------------------------------------------- 
     def __init__(self, parent, title): 
      wx.Frame.__init__(self, None, title="First Frame", size=(1240,705)) 
      self.UI() 
      self.Centre() 
      self.Show() 

     #---------------------------------------------------------------------- 
     def UI(self): 
      self.panel1 = wx.Panel(self, -1) 
      self.sizer = wx.BoxSizer() 
      self.sizer.Add(self.panel1, 1, flag=wx.EXPAND) 
      b = wx.Button(self.panel1, label='second window', size=(180,100), pos=(650,25)) 
      b.Bind(wx.EVT_BUTTON, self.OnB)   

      self.SetSizer(self.sizer) 

     #---------------------------------------------------------------------- 
     def OnB(self, event): 
      frame = SecondFrame() 
      frame.Show() 

#---------------------------------------------------------------------- 
app = wx.App(False) 
Prototype(None, title='') 
app.MainLoop() 

我真的不建議混合施膠劑和絕對定位雖然。你應該使用一個或另一個。我建議使用sizer,除非您打算製作無法調整大小的框架。

0

只需創建一個新的wx.Frame因爲你已經在你的應用程序一樣。添加沿線的東西到你的按鈕事件處理函數:

self.second_window = wx.Frame(None) 
self.second_window.Show() 
+0

但是可以保持兩個窗口分開嗎? – Iancovici 2013-02-25 19:15:21

+0

你對「分離」的定義是什麼?這兩個窗口在屏幕上是獨立的。爲什麼我將第二個窗口添加到第一個窗口作爲屬性的唯一原因是能夠從第一個窗口再次關閉它,例如使用另一個按鈕。這不是必需的。 – Fenikso 2013-02-25 19:35:27

+0

另外彈出窗口 – Iancovici 2013-02-25 20:32:32

相關問題