2012-01-24 3 views
0

У меня нет ошибок с моим кодом, но после того, как я нажал кнопку спама, он зависает и ничего не происходит. Кто-нибудь видит что-то неправильно с кодом?Приложение wxPython: Ошибка, но все еще зависает

import Skype4Py, wx, time as t 


    skype = Skype4Py.Skype() 
    skype.Attach() 
    name = "" 
    chat = "" 
    message = "" 


    class skyped(wx.Frame): 

     def __init__(self,parent,id): 
      wx.Frame.__init__(self,parent,id,"Skype Chat Spammer",size=(300,200)) 
      panel=wx.Panel(self) 
      start=wx.Button(panel,label="Spam!",pos=(140,100),size=(50,20)) 
      stop=wx.Button(panel,label="Stop!", pos=(200,100),size=(50,20)) 
      self.Bind(wx.EVT_BUTTON, self.spam, start) 
      self.Bind(wx.EVT_CLOSE, self.closewindow) 
      entered=wx.TextEntryDialog(None, "User to spam?", "User", "Username Here") 
      if entered.ShowModal()==wx.ID_OK: 
       name=entered.GetValue() 
      entered1=wx.TextEntryDialog(None, "Message?", "Message", "Message Here") 
      if entered1.ShowModal()==wx.ID_OK: 
       message=entered1.GetValue() 

     def spam(self,event): 
      global chat 
      global name 
      global message 
      chat = skype.CreateChatWith(name) 
      while 1: 
       chat.SendMessage(message) 

     def closewindow(self,event): 
      self.Destroy() 

    if __name__=="__main__": 
     app=wx.PySimpleApp() 
     frame=skyped(parent=None,id=-1) 
     frame.Show() 
     app.MainLoop() 

ответ

2

Строительства от ответа Котлиньского в, да его замерзание, потому что вы делаете бесконечный цикл в основном потоке ваше приложение. Приложение больше не может обрабатывать любые связанные с gui взаимодействия или события.

Хотя я не знаю много wx, теория такая же, как PyQt. Вы никогда не должны блокировать основной поток вашего приложения с помощью любых длительных или тяжелых операций. Те, должны быть проложены в отдельных потоках и связи назад с сигналами:

http://wiki.wxpython.org/LongRunningTasks

Вашего основной поток всегда должен быть ясен для обработки взаимодействия с пользователем с виджетами.

+0

Спасибо, что я искал. – user1152873

0

Это, вероятно, замерзает, потому что ваше приложение переходит в бесконечный цикл здесь:

while 1: 
     chat.SendMessage(message) 
+0

Я предполагаю, что wx просто не могу обработать его, потому что я работал, прежде чем я ввел wx в него. – user1152873

+0

Его не то, что wx can not справится с этим. Это то, что вы не можете обработать wx :). Когда вы сделали это без wx, вы смогли увидеть, что он сидит в цикле и обрабатывается, но теперь вы просто блокируете основной поток. Что вам нужно сделать, это запустить это в потоке – jdi

Смежные вопросы