wxPython изменить курсор мыши, чтобы уведомить о длительной операции - PullRequest
6 голосов
/ 27 октября 2011

Я создаю программу на Python, которая выполняет поиск на удаленном веб-сайте. Иногда операция занимает много секунд, и я считаю, что пользователь не заметит в строке состояния сообщение «Операция поиска выполняется». Поэтому я хотел бы изменить курсор мыши, чтобы выделить, что программа все еще ждет результата.

Это метод, который я использую:

def OnButtonSearchClick( self, event ):
        """
        If there is text in the search text, launch a SearchOperation.
        """
        searched_value = self.m_search_text.GetValue()

        if not searched_value:
            return

        # clean eventual previous results
        self.EnableButtons(False)
        self.CleanSearchResults()

        operations.SearchOperation(self.m_frame, searched_value)

Я пробовал два разных подхода, оба перед последней строкой:

  • wx.BeginBusyCursor ()
  • self.m_frame.SetCursor (wx.StockCursor (wx.CURSOR_WAIT))

Никто из них не работает.

Я использую KDE под GNU / Linux. Это не работает и под Gnome

Есть намеки? Спасибо

1 Ответ

6 голосов
/ 27 октября 2011

Я спросил об этом Робина Данна, создателя wxPython, и похоже, что это должно работать, но не работает.Однако, если вы вызываете SetCursor () панели, он работает или мне так сказали.Вот пример, который вы можете попробовать:

import wx

########################################################################
class MyForm(wx.Frame):

    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial")

        # Add a self.panel so it looks the correct on all platforms
        self.panel = wx.Panel(self, wx.ID_ANY)

        btn = wx.Button(self.panel, label="Change Cursor")
        btn.Bind(wx.EVT_BUTTON, self.changeCursor)
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(btn)
        self.panel.SetSizer(sizer)

    #----------------------------------------------------------------------
    def changeCursor(self, event):
        """"""
        myCursor= wx.StockCursor(wx.CURSOR_WAIT)
        self.panel.SetCursor(myCursor)


#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()
...