数据库加载面板屏幕静态文本在显示时显示为

时间:2017-05-25 00:12:30

标签: python hide wxwidgets show

数据库加载面板屏幕StaticText在显示时显示为

您好,

我在加载屏幕上遇到了一个奇怪的问题。问题是这样的:当我开始使用主屏幕时,当你点击“下一步”按钮时, 它进入数据库加载屏幕,完成后,它会在屏幕上打印数据库加载完成。

问题在于加载屏幕文本由于某种原因而模糊不清。另外,我发现的是,如果你弹出一个消息对话框 框,加载文本显示...

在这个例子中,我实际上并没有加载到实际的数据库中。相反,我只是睡了七秒钟。

如果您对我所说的内容感到困惑,只需运行示例,您就会看到加载屏幕全部搞砸了......

以下是代码:

import wx
import time

class TextPanel(wx.Panel):

    def __init__(self, parent, label):

        self.__myParent = parent    
        wx.Panel.__init__(self, self.__myParent, size = (800, 800))        
        staticText = wx.StaticText(self, label = label)

class MainPanel(wx.Panel):

    def __init__(self, parent):

        self.__myParent = parent    
        wx.Panel.__init__(self, self.__myParent, size = (800, 800))
        nextButton = wx.Button(self, label = 'Next')
        nextButton.Bind(wx.EVT_BUTTON, self.__onNext)

    def __onNext(self, event):

        self.__myParent.onNextScreen()

class MainFrame(wx.Frame):  

    def __init__(self):

        # Base contsructor.
        wx.Frame.__init__(self, None, id = -1, title = 'Testing...', size = (800, 800))

        self.__myMainPanel = MainPanel(self)
        self.__myMainPanel.Show()

        self.__myDatabase = TextPanel(self, 'Loading Data...')
        self.__myDatabase.Hide()

        self.__myFinalPanel = TextPanel(self, 'Database Loading Complete!')
        self.__myFinalPanel.Hide()

    def onNextScreen(self):

        self.__myMainPanel.Hide()
        self.__myDatabase.Show()

        self.doDatabaseLoad()

        self.__myDatabase.Hide()
        self.__myFinalPanel.Show()

    def doDatabaseLoad(self):    

        time.sleep(7) # before, this method would load data into a database...

if __name__ == '__main__':
    app = wx.App()
    frame = MainFrame()
    frame.Show(True)
    app.MainLoop()

    print 'Exiting...'

1 个答案:

答案 0 :(得分:0)

感谢大家的帮助,

我找到了解决此问题的简单方法。 我首先发现wx.Panel.Update()被调用以在事件处理程序方法返回时重新绘制屏幕。因此,加载面板看起来似乎需要重新绘制,因为静态文本框全部变灰。然后我在self .__ myDatabase.Show()之后调用self .__ myDatabase.Update()。 这是onNextScreen的新版本(自我):

def onNextScreen(self):

    self.__myMainPanel.Hide()
    self.__myDatabase.Show()

    self.__myDatabase.Update() # Fixes the bug...

    self.doDatabaseLoad()

    self.__myDatabase.Hide()
    self.__myFinalPanel.Show()

另外,修复它的另一种方法是在静态文本上调用SetLabel,但上述解决方案更好。似乎没有自动调用Update,因为它正处于事件的中间......