python - 滚动条消失/刷新在 wx.python 中不起作用

标签 python wxpython scrollbar

在下面的示例中,尽管调用了布局函数,但使用计算按钮后滚动条消失了。如果您手动调整框架大小,它会重新出现。此行为仅在 Windows 下发生,在 Linux 中滚动条按其应有的功能运行。

为了解决这个问题,我尝试了函数refresh()和update()(在类GUI_Diagrams_GHL的布局函数中) - 但它没有帮助。

我尝试将我的应用程序简化为这个最小的工作示例:

# -*- coding: utf-8 -*-

import wx
from wx.lib.pubsub import pub
import wx.lib.scrolledpanel as scrolled
import matplotlib
matplotlib.use('WXAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas

class MainWindow(wx.Frame):
    '''Frame that contains pretty much everything'''
    def __init__(self,*args,**kwargs):
        '''Constructor'''
        super(MainWindow,self).__init__(*args,**kwargs)
        self.panel = wx.Panel(self)
        notebook = Notebook(self.panel)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook,1, wx.ALL|wx.EXPAND,4)
        self.panel.SetSizerAndFit(sizer)
        self.panel.Layout()

class Notebook(wx.Notebook):
    def __init__(self, parent):
        wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style = wx.BK_DEFAULT)
        tabTwo = GUI_Input_GHL(self) 
        self.AddPage(tabTwo, 'Input')
        tabThree = GUI_Diagrams_GHL(self)  
        self.AddPage(tabThree, 'Diagrams')

class GUI_Input_GHL(scrolled.ScrolledPanel):
    """This panel contains the input fields for basic data."""
    def __init__(self, parent):
        scrolled.ScrolledPanel.__init__(self, parent=parent, id=wx.ID_ANY)
        self.label_1 = wx.StaticText(self,-1,label=u'Label 1')
        self.button2 = wx.Button(self,-1,label=u'Start')
        self.Bind(wx.EVT_BUTTON, self.StartCalc, self.button2)
        self.layout()       

    def layout(self):    
        sizer = wx.GridBagSizer()
        sizer.Add(self.button2, (8,0),(2,3), flag =wx.EXPAND)
        sizer.Add(self.label_1, (0,0),flag=wx.ALIGN_CENTER_VERTICAL)
        self.SetAutoLayout(1)
        self.SetupScrolling()
        self.SetSizerAndFit(sizer)

    def StartCalc(self,event):
        pub.sendMessage('GUI_Diagrams_Listener', message = 'test')

class GUI_Diagrams_GHL(scrolled.ScrolledPanel):
    """This panel contains diagrams"""
    def __init__(self, parent):
        scrolled.ScrolledPanel.__init__(self, parent=parent, id=wx.ID_ANY)
        self.parent = parent
        self.fig1 = Figure()
        self.fig6 = Figure()
        self.canvas1 = FigCanvas(self,-1,self.fig1)
        self.axes1 = self.fig1.add_subplot(111)
        self.canvas6 = FigCanvas(self,-1,self.fig6)
        self.axes6 = self.fig6.add_subplot(111)
        self.dia_R_hat_SetValues('test')
        self.dia_theta_SetValues('test')
        self.layout()
        pub.subscribe(self.diagrams_SetValues, "GUI_Diagrams_Listener")


    def layout(self):
        sizer = wx.GridBagSizer()
        sizer.Add(self.canvas1,   (1,0), (12,12), wx.EXPAND)
        sizer.Add(self.canvas6,  (53,0), (12,12), wx.EXPAND)

        ## I guess here is the problem somewhere:
        self.SetSizerAndFit(sizer)
        self.SetAutoLayout(1)
        self.SetupScrolling()
        #self.Fit()
        #self.Layout()
        #self.FitInside()
        #self.AlwaysShowScrollbars(True,True)
        #self.Refresh()
        #self.Update()
        #self.parent.SetSize(self.parent.GetSize())

    def diagrams_SetValues(self, message):
        self.Output = message
        self.dia_R_hat_SetValues(message)
        self.dia_theta_SetValues(message)
        self.layout()

    def dia_R_hat_SetValues(self, Output):
        self.axes1.clear()
        self.axes1.plot(range(15),range(15), 'r-', linewidth = 2)
        self.canvas1.draw()

    def dia_theta_SetValues(self, Output):
        self.axes6.clear()
        self.axes6.plot(range(5),'k')
        self.axes6.set_title(r"Absolute Temperature")
        self.canvas6.draw()


if __name__ == '__main__':
    app = wx.App()
    frame = MainWindow(None, -1, 'MyApp')
    frame.Show()
    app.MainLoop()

最佳答案

我自己已经弄清楚了:)

如果在更新图表/在图表类的布局中调用主面板的布局函数('MainWindow.panel.Layout()'),整个面板将刷新并 滚动条重新出现。因此,在这种情况下,“parent.parent.Layout()”对我有用。

还有其他建议/解决方案吗?

关于python - 滚动条消失/刷新在 wx.python 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26442258/

相关文章:

python - 运行 wxPython2.8 文档和演示附带的教程时出错

python - 测量器... - wxPython

css - 使用 CSS 样式化滚动条

python - SSL 握手错误 : [Errno 1]

python - Kivy:AttributeError 具有在 kv 文件中定义的属性

python - 如何使 `requests` 使用与 DNS 解析不同的主机名进行 TLS 验证?

python-2.7 - python + wx & uno 使用 ubuntu 14.04 填充 libreoffice

css - 如果文本溢出 HTML/CSS,强制 div 滚动?

jquery - 如何实现位于当前 View 底部的水平滚动条?

python - 从多处理启动 celery Worker