数据库加载面板屏幕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...'
答案 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,因为它正处于事件的中间......