【问题标题】:Database Loading Panel Screen StaticText is Blurred Out when Shown数据库加载面板屏幕 StaticText 在显示时模糊不清
【发布时间】:2017-10-25 12:05:32
【问题描述】:

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

你好,

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

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

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

如果你对我所说的感到困惑,只需运行示例,你就会看到加载屏幕全乱了......

代码如下:

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...'

【问题讨论】:

  • 什么操作系统/工具包?什么版本?什么 wxPython/python 版本?
  • 我正在使用 Python 2.7.13(64 位)和 wxPython 3.0.2.0
  • 什么操作系统?什么版本?什么工具包?什么版本?
  • 我正在运行 Windows 7 Professional SP1 x64。该工具包是 wx 版本 3.0.2.0
  • 我刚刚注意到,如果您在静态文本对象上调用 SetLabel('label'),标签就会变得可见。这是为什么呢?

标签: python hide wxwidgets show


【解决方案1】:

感谢大家的帮助,

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

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 没有被自动调用,因为它处于事件的中间......

【讨论】:

    猜你喜欢
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多