3

我需要通过单击按钮在 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()
4

2 回答 2

4

这是一个工作示例:

 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()

不过,我真的不建议混合使用 sizers 和绝对定位。您应该使用其中一种。除非您打算制作无法调整大小的框架,否则我建议使用 sizers。

于 2013-02-25T22:47:15.920 回答
0

wx.Frame只需像您在应用程序中所做的那样创建一个新的。将一些内容添加到您的按钮事件处理程序中:

self.second_window = wx.Frame(None)
self.second_window.Show()
于 2013-02-25T18:58:51.673 回答