【问题标题】:wxPython - blank frame in UbuntuwxPython - Ubuntu 中的空白框架
【发布时间】:2012-02-10 02:59:41
【问题描述】:

我已经用 wxPython 编写了一个基本的应用程序。虽然它在 Windows 下运行良好,但在 Linux(Ubuntu 11.10)下,框架将显示为空(除了左侧的一些小损坏元素)。控制台中没有错误。就在运行它之前,我按照http://wiki.wxpython.org/InstallingOnUbuntuOrDebian安装了wxPython

任何想法表示赞赏。

class MainWindow(wx.Frame):
def __init__(self, parent, title):
    self.dirname=''

    # A "-1" in the size parameter instructs wxWidgets to use the default size.
    wx.Frame.__init__(self, parent, title=title, size=(400,500),style=wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX))
    self.CreateStatusBar() # A Statusbar in the bottom of the window
    panel = wx.Panel(self, wx.ID_ANY)

    # Setting up the menus
    filemenu = wx.Menu()
    editmenu = wx.Menu()

    menuOpen = filemenu.Append(wx.ID_OPEN, "&Open"," Open an underway netCDF to load")
    menuAbout= filemenu.Append(wx.ID_ABOUT, "&About"," Information about this program")
    menuExit = filemenu.Append(wx.ID_EXIT,"E&xit"," Terminate the program")
    menuConfig = editmenu.Append(wx.ID_EDIT, "&Config", "Edit Configuration")

    # Creating the menubar.
    menuBar = wx.MenuBar()
    menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar
    menuBar.Append(editmenu,"&Edit")
    self.SetMenuBar(menuBar)  # Adding the MenuBar to the Frame content.

    #Sizer setup.
    sizer = wx.BoxSizer(wx.VERTICAL) #root sizer
    buttonSizer = wx.BoxSizer(wx.HORIZONTAL)

    #Buttons.
    self.buttonLoadData = wx.Button(panel, -1, "&Load Data")
    self.buttonAbort = wx.Button(panel, -1, "&Abort Load")
    self.buttonAbort.Enabled = False
    self.buttonLoadData.Enabled = False

    #Slider. Should probably be a floating point spin control.
    #self.sliderRate = wx.Slider(panel, -1, 5, 0, 100, wx.DefaultPosition, (380, -1), wx.SL_AUTOTICKS | wx.SL_LABELS)
    self.sliderRate = self.FloatSlider(panel, -1, 1000, 0, 5000, wx.DefaultPosition, (380, -1), wx.SL_AUTOTICKS | wx.SL_LABELS)

    #Log window.
    self.log = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_READONLY)


    # Events.
    self.Bind(wx.EVT_MENU, self.OnOpen, menuOpen)
    self.Bind(wx.EVT_MENU, self.OnExit, menuExit)
    self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout)
    self.Bind(wx.EVT_MENU, self.OnConfig, menuConfig)
    self.Bind(wx.EVT_BUTTON, self.OnLoadButton, self.buttonLoadData)
    self.Bind(wx.EVT_BUTTON, self.OnAbortButton, self.buttonAbort)
    self.Bind(wx.EVT_SLIDER, self.OnSlider)

    #Subscribe to messages from underlying simulator
    Publisher().subscribe(self.updateDisplay, "update")

    #Layout sizers
    buttonSizer.Add(self.buttonLoadData, 0, wx.ALL, 5)
    buttonSizer.Add(self.buttonAbort, 0, wx.ALL, 5)
    sizer.Add(buttonSizer, 0, wx.ALL, 5)
    sizer.Add(self.sliderRate, 0, wx.ALL, 5)
    sizer.Add(self.log, 1, wx.EXPAND, 5)

    panel.SetSizer(sizer)
    panel.Layout()

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    您可能忘记在SetSizerLayout 之间添加sizer.Fit(panel) 以确保wxPython 正确计算布局。我不知道为什么它可以在 Windows 上运行,但在 Linux 上,如果没有 Fit,我无法使 wxPython 正确显示帧:

        panel.SetSizer(sizer)
        sizer.Fit(panel)
        panel.Layout()
    

    应该这样做。

    【讨论】:

    • 我发现这在某些情况下会有所帮助,但不是全部。不过还是有帮助的
    猜你喜欢
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2011-11-06
    • 1970-01-01
    • 2010-11-14
    • 2023-04-03
    相关资源
    最近更新 更多