【问题标题】:Is there a wxpython event like program_start?是否有类似 program_start 的 wxpython 事件?
【发布时间】:2010-08-10 15:19:29
【问题描述】:

好的,我正在尝试以另一种方式解释我想要实现的目标。这是一个例子:

如果是杀毒程序,用户可以选择两种方式运行程序,选择一,程序启动时自动开始扫描磁盘病毒,选择二,点击开始按钮制作程序程序启动后,用户可以随时扫描磁盘以查找病毒。所以,作为一个 wxpython 初学者,我知道如何绑定 wx.EVT_BUTTON 让用户点击开始按钮后开始扫描,但我不知道如何在程序启动后开始扫描。我想知道是否有我可以绑定的 program_start 事件?希望你们能帮帮我。谢谢!

【问题讨论】:

    标签: python event-handling wxpython


    【解决方案1】:

    在 wxPython 中,您可以覆盖 Application 类的 OnInit 方法以在程序启动时运行代码。例如:

      def OnInit(self):
        # Check for a running instance for this user.  Do not instantiate if found.
        if self.checkInstance():
          dbcon.cursor().callproc('post_mutex', (self.mutexname,))
          dbcon.commit()
          self.Cleanup()
          return False
    
        # Register for database events.
        DataCache['dbListener'] = dbListener()
    
        return True
    

    在我的应用程序类中当然还有另一种方法,称为 checkInstance。根据它的返回值,我的应用程序要么启动,要么触发另一个正在运行的实例启动。

    在 wxPython 中,您不必对您的 App 类做任何特别的事情来为您的 OnInit 方法进行绑定。如果你覆盖它,它会自动发生。

    【讨论】:

    • 是否可以定义一个新事件并像按钮事件绑定一样绑定它?如self.Bind(NewEvent, self.RunAtStart, self.StartButton)
    • @Shane - 是的,您可以创建自定义事件,绑定它们,然后触发它们,但这并不是您最初提出的问题。这是一个如何在程序启动时运行代码的示例。您可以从这里做出决定、实例化其他类等。听起来您真的只是想将一个 Button 绑定到一个您已经知道该怎么做的方法。
    【解决方案2】:

    为什么不在模块代码中运行它呢?这样它只会运行一次,因为模块中的代码每个程序实例只运行一次。

    【讨论】:

    • 其实我想给用户一个选择,在程序启动时做一些事情(运行事件处理程序)或者在程序启动后点击一个按钮手动做一些事情(运行事件处理程序)。我只是从 wxpython 开始,所以你能更具体一点吗?我真的不明白你的意思,对不起...
    • 我想,您必须更具体地说明您要实现的目标。请尝试在问题中描述它。
    【解决方案3】:

    在您的 init 或 OnInit 方法中,进行某种检查以查看程序是否应在启动时运行启动过程(即检查配置文件等)。如果是,请使用 wx.CallAfter 或 wx.CallLater 调用“扫描”方法,或者在 Show() 帧之后调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多