【问题标题】:How to make additional window in wxpython on a click of a button如何通过单击按钮在 wxpython 中创建附加窗口
【发布时间】:2013-02-25 15:39:50
【问题描述】:

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

【问题讨论】:

    标签: wxpython


    【解决方案1】:

    这是一个工作示例:

     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 和绝对定位。您应该使用其中一种。除非您打算制作无法调整大小的框架,否则我建议使用 sizers。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 但是是否可以将两个窗口分开?
      • 您对“分离”的定义是什么?这两个窗口在屏幕上是独立的。我将第二个窗口作为属性添加到第一个窗口的唯一原因是能够从第一个窗口再次关闭它,例如使用另一个按钮。这不是必需的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多