我在wxpython中有关于面板的问题

问题描述

我想和this这样的wxpython建立接口 我在将webview,按钮,textview和绘图嵌入到不同面板中时遇到了问题

当我尝试将webview嵌入panel3时,它在面板右上方显示为小方块

请帮助我

import wx
import wx.html2 

class MyFrame(wx.Frame):
    def __init__(self,parent,ID,title):
        wx.Frame.__init__(self,title)
        
        hBox = wx.BoxSizer(wx.HORIZONTAL)
        
        panel1 = wx.Panel(self,-1,pos=(1,1),size=(1600,50),style=wx.SUNKEN_BORDER)
        panel2 = wx.Panel(self,size=(1300,500),style=wx.SUNKEN_BORDER)
        panel3 = wx.Panel(self,pos=(1300,size=(300,style=wx.SUNKEN_BORDER)
        panel4 = wx.Panel(self,550),style=wx.SUNKEN_BORDER)
        

        panel1.SetBackgroundColour("BLUE")    #buttons in here
        panel2.SetBackgroundColour("RED")     #plots in here
        panel3.SetBackgroundColour("GREY")    #webview in here
        panel4.SetBackgroundColour("YELLOW")  #textview in here
        
        browser = wx.html2.WebView.New(panel3)
        browser.LoadURL("http://www.google.com")
        hBox.Add(browser,wx.EXPAND)
     
         

app = wx.App()
frame = MyFrame(None,"Sizer Test")
frame.Show()
app.MainLoop()

解决方法

您已使用Sizer定义了SetSizer,但尚未分配。
我认为,为了迫使它起作用,您已经在面板中添加了位置。 Sizer / Sizer可以为您执行任务,因此Sizers不再需要职位。
如果我们删除职位,分配一些合理的大小并应用Sizers,我们会得到这个。
这可能不是您要追求的目标,但这是一个起点。

import wx
import wx.html2 

class MyFrame(wx.Frame):
    def __init__(self,parent,ID,title):
        wx.Frame.__init__(self,title)
        
        vbox = wx.BoxSizer(wx.VERTICAL)
        hbox = wx.BoxSizer(wx.HORIZONTAL)

        panel1 = wx.Panel(self,-1,size=(-1,100),style=wx.SUNKEN_BORDER)
        panel2 = wx.Panel(self,style=wx.SUNKEN_BORDER)
        panel3 = wx.Panel(self,400),style=wx.SUNKEN_BORDER)
        panel4 = wx.Panel(self,style=wx.SUNKEN_BORDER)
        

        panel1.SetBackgroundColour("BLUE")    #buttons in here
        panel2.SetBackgroundColour("RED")     #plots in here
        panel3.SetBackgroundColour("GREY")    #webview in here
        panel4.SetBackgroundColour("YELLOW")  #textview in here
        
        browser = wx.html2.WebView.New(panel3)
        browser.LoadURL("http://www.duckduckgo.com")

        hbox.Add(browser,proportion=1,flag=wx.EXPAND)
        panel3.SetSizer(hbox)

        vbox.Add(panel1,flag=wx.EXPAND)
        vbox.Add(panel2,flag=wx.EXPAND)
        vbox.Add(panel3,flag=wx.EXPAND)
        vbox.Add(panel4,flag=wx.EXPAND)
        self.SetSizer(vbox)     
         

app = wx.App()
frame = MyFrame(None,"Sizer Test")
frame.Show()
app.MainLoop()

enter image description here