我的代码没有任何错误,但在我点击垃圾邮件按钮后,它会冻结,没有任何反应。有没有人看到代码有什么问题?
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()
答案 0 :(得分:2)
建立kotlinski的答案,是的,因为你在你的应用程序的主线程中进行无限循环,所以它会冻结。该应用程序无法再处理任何与gui相关的交互或事件。
虽然我不太了解wx,但理论与PyQt相同。任何长时间运行或繁重的提升操作都不应该阻止应用程序的主线程。这些应该在不同的线程中运行并与信号通信:
http://wiki.wxpython.org/LongRunningTasks
您的主线程应始终清晰,以处理用户与小部件的交互。
答案 1 :(得分:0)
它可能会冻结,因为你的应用程序在这里进入无限循环:
while 1:
chat.SendMessage(message)