[英]Python send websocket message in tkinter
我在python 2.7上的tkinter中發送websocket消息時遇到問題。 我現在有Tkinter的和WebSocket的客戶在一個線程中運行,因此它們都同時循環工作,因為看到這里 。 問題是,每當我嘗試鍵入消息並按發送按鈕時,都會收到NameError。 我正在使用的websocket客戶端在這里 。
這是我的代碼:
from Tkinter import *
from websocket import *
from threading import *
master = Tk()
master.wm_title("Websocket Test")
minwidth = master.winfo_screenwidth()/4*3
minheight = master.winfo_screenheight()/4*3
master.minsize(width=minwidth, height=minheight)
master.resizable(0,0)
def sendmsg():
msg = entry.get()
ws.send(msg)
return
text = Text(master)
text.pack(side=TOP, expand=True,fill=BOTH)
entry = Entry(master)
entry.pack(side=BOTTOM, expand=True, fill=BOTH)
button = Button(master, text="SEND", command=sendmsg)
button.pack(side=BOTTOM, expand=True, fill=BOTH)
def on_message(ws, message):
text.insert(END, "Received: "+message+"\n")
print "Received: "+message
return
def on_error(ws, error):
text.insert(END, error+"\n")
print error
return
def on_close(ws):
text.insert(END, "### closed ###\n")
print "### closed ###"
return
def on_open(ws):
ws.send("hello")
ws.send("testing")
return
def connection():
enableTrace(True)
ws = WebSocketApp("ws://echo.websocket.org/", on_message = on_message, on_error = on_error, on_close = on_close)
ws.on_open = on_open
ws.run_forever()
return
t = Thread(target=connection)
t.start()
master.mainloop()
這是我每次嘗試發送消息時都會收到的錯誤消息:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1486, in __call__
return self.func(*args)
File "C:\Users\User\Desktop\thing.py", line 14, in sendmsg
ws.send(msg)
NameError: global name 'ws' is not defined
我認為這與線程有關,但是我不確定是什么引起了問題。 websocket on_open函數使用ws.send()成功將消息發送到服務器,但sendmsg函數沒有。 感謝所有幫助,因為我是線程技術的新手。
那是因為你
def sendmsg():
msg = entry.get()
ws.send(msg)
return
您需要首先實例化websocket:
def sendmsg():
ws = WebSocketApp("ws://echo.websocket.org/", on_message = on_message, on_error = on_error, on_close = on_close)
msg = entry.get()
ws.send(msg)
return
看起來您稍后會在connection()
創建一個ws實例,然后執行ws = WebSocketApp("ws://echo.websocket.org/", on_message = on_message, on_error = on_error, on_close = on_close)
。 只需確保在使用ws
之前已完成此操作,因為這是定義它的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.