首页 > 解决方案 > 我对 wxpython 中的面板有疑问

问题描述

我想用 wxpython 做一个这样的界面 有关于在不同面板中嵌入 webview、按钮、textview 和绘图的问题

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

请帮我

import wx
import wx.html2 

class MyFrame(wx.Frame):
    def __init__(self, parent, ID, title):
        wx.Frame.__init__(self, parent, ID, 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,-1 , pos=(1,50),size=(1300,500), style=wx.SUNKEN_BORDER)
        panel3 = wx.Panel(self,-1 , pos=(1300,50),size=(300,500), style=wx.SUNKEN_BORDER)
        panel4 = wx.Panel(self,-1 , pos=(1,550),size=(1600,500), 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, -1, "Sizer Test")
frame.Show()
app.MainLoop()

标签: pythonuser-interfacewxpythonpanelboxsizer

解决方案


您已经定义了 aSizer但尚未分配它,使用SetSizer.
我认为,为了强制它工作,您已经包含了面板的位置。ASizer消除了拥有职位的需要,因为Sizer/Sizers为您执行该任务。
如果我们删除位置,分配一些合理的大小并应用Sizers,我们得到这个。
这可能不是你所追求的,但它是一个起点。

import wx
import wx.html2 

class MyFrame(wx.Frame):
    def __init__(self, parent, ID, title):
        wx.Frame.__init__(self, parent, ID, 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,-1 , size=(-1,100), style=wx.SUNKEN_BORDER)
        panel3 = wx.Panel(self,-1 , size=(-1,400), style=wx.SUNKEN_BORDER)
        panel4 = wx.Panel(self,-1 , size=(-1,100), 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, -1, "Sizer Test")
frame.Show()
app.MainLoop()

在此处输入图像描述


推荐阅读