2012-01-24 37 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

大厦关闭kotlinski的回答,是其冻结,因为你正在做的主线程死循环你的申请。该应用程序不能再处理任何与gui相关的交互或事件。

虽然我不太了解wx,但理论与PyQt相同。任何长时间运行或繁重的操作都不应阻塞应用程序的主线程。这些应该在单独的线程中运行,并与信号传送回:

http://wiki.wxpython.org/LongRunningTasks

你的主线程应始终清楚地处理与小部件的用户交互。

+0

谢谢你这就是我一直在寻找的。 – user1152873

0

它可能冻结,因为你的应用程序进入无限循环的位置:

while 1: 
     chat.SendMessage(message) 
+0

我想wx只是不能处理它,因为我在它实现wx之前已经工作了。 – user1152873

+0

它不是那个wx不能处理它。它,你不能处理wx :)。当你没有使用wx的时候,你可以看到它坐在循环中并处理,但现在你只是阻塞了主线程。你需要做的就是在一个线程中运行这个 – jdi

相关问题