wxPython中设置SPLASH_NO_TIMEOUT后启动画面仍点击消失的问题
wxPython启动画面点击自动关闭问题解决
默认情况下,wx.adv.SplashScreen 即使设置了 SPLASH_NO_TIMEOUT,点击画面时仍会自动关闭——这是控件内置的行为,和超时时间设置无关。
要实现仅手动关闭的启动画面,有两种简单方法:
方法一:子类化重写鼠标点击方法
自定义 SplashScreen 子类,重写 OnMouseDown 方法,不执行默认的关闭逻辑:
import wx import wx.adv class ManualCloseSplash(wx.adv.SplashScreen): def OnMouseDown(self, evt): # 空实现,阻止默认的关闭操作 pass # 初始化应用和自定义启动画面 app = wx.App(False) splash = ManualCloseSplash( wx.Bitmap('res/splash.jpg', wx.BITMAP_TYPE_JPEG), wx.adv.SPLASH_CENTRE_ON_SCREEN | wx.adv.SPLASH_NO_TIMEOUT, -1, None, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.BORDER_SIMPLE | wx.STAY_ON_TOP ) # 后续在需要关闭的时机手动调用,比如主窗口加载完成后 # main_window = wx.Frame(None, title="主窗口") # main_window.Show() # splash.Close() app.MainLoop()
方法二:绑定并忽略鼠标点击事件
直接给默认的 SplashScreen 绑定鼠标左键点击事件,忽略事件传递:
import wx import wx.adv app = wx.App(False) splash = wx.adv.SplashScreen( wx.Bitmap('res/splash.jpg', wx.BITMAP_TYPE_JPEG), wx.adv.SPLASH_CENTRE_ON_SCREEN | wx.adv.SPLASH_NO_TIMEOUT, -1, None, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.BORDER_SIMPLE | wx.STAY_ON_TOP ) # 绑定左键点击事件,忽略它 splash.Bind(wx.EVT_LEFT_DOWN, lambda evt: None) # 手动关闭逻辑同上 # main_window = wx.Frame(None, title="主窗口") # main_window.Show() # splash.Close() app.MainLoop()
两种方法都能实现点击启动画面不关闭,必须通过代码调用 splash.Close() 来手动关闭。
内容的提问来源于stack exchange,提问作者Bazini
相关产品推荐
相关产品推荐

