You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:20:32