Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用readline()从终端发送东西很好,但是我无法理解。Dewzy,你能把你的程序精简到一个最小的例子来说明什么不起作用吗?还有,到底是什么不起作用?好吧,我清理了代码。这是我的困境。有了这个代码,如果我把东西输入终端,它就可以正常工作。GUI显示代码_Python_Sockets_Tkinter - Fatal编程技术网

Python 使用readline()从终端发送东西很好,但是我无法理解。Dewzy,你能把你的程序精简到一个最小的例子来说明什么不起作用吗?还有,到底是什么不起作用?好吧,我清理了代码。这是我的困境。有了这个代码,如果我把东西输入终端,它就可以正常工作。GUI显示代码

Python 使用readline()从终端发送东西很好,但是我无法理解。Dewzy,你能把你的程序精简到一个最小的例子来说明什么不起作用吗?还有,到底是什么不起作用?好吧,我清理了代码。这是我的困境。有了这个代码,如果我把东西输入终端,它就可以正常工作。GUI显示代码,python,sockets,tkinter,Python,Sockets,Tkinter,使用readline()从终端发送东西很好,但是我无法理解。Dewzy,你能把你的程序精简到一个最小的例子来说明什么不起作用吗?还有,到底是什么不起作用?好吧,我清理了代码。这是我的困境。有了这个代码,如果我把东西输入终端,它就可以正常工作。GUI显示代码,服务器接收代码。但是,如果我尝试在条目中键入任何内容并按enter键,则什么也不会发生。我仍然可以输入到终端,这仍然会发送到服务器,但Tkinter条目不会发生任何变化。我无法将Tkinter输入字段添加到select中,因为它不是具有fil


使用readline()从终端发送东西很好,但是我无法理解。Dewzy,你能把你的程序精简到一个最小的例子来说明什么不起作用吗?还有,到底是什么不起作用?好吧,我清理了代码。这是我的困境。有了这个代码,如果我把东西输入终端,它就可以正常工作。GUI显示代码,服务器接收代码。但是,如果我尝试在条目中键入任何内容并按enter键,则什么也不会发生。我仍然可以输入到终端,这仍然会发送到服务器,但Tkinter条目不会发生任何变化。我无法将Tkinter输入字段添加到
select
中,因为它不是具有
fileno
方法的套接字或类似文件的对象。这有意义吗?fwiw,这在windows上不起作用,因为它缺少
createfilehandler
import socket, select, threading, Queue, cPickle
from Tkinter import *
from Message import *

class GUI(Frame):

    def __init__(self, host="localhost",port=5678, root="Tk()"):
        Frame.__init__(self,root)
        self.nickname = raw_input("What is your screen name? ")
        self.inqueue = Queue.Queue()
        self.outqueue = Queue.Queue()
        self.root = root
        self.text = Text(self,height=10,width=40)
        self.scroll=Scrollbar(self)
        self.text.configure(yscrollcommand=self.scroll.set)
        self.scroll.grid(row=0, column=1, sticky=N+S)
        self.scroll.config(command=self.text.yview)
        self.text.grid(row=0,column=0)
        self.entry = Entry(self)
        self.entry.grid(row=1,column=0)
        self.pack()
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.connect((host, port))
        self.sock.send(self.nickname)
        self.thread1=threading.Thread(target=self.cmdloop)
        self.thread1.start()
        self.entry.bind("<Return>",self.enter)
        self.call()

    def enter(self,event):
        msg = Message(self.nickname,0,self.entry.get())
        self.entry.delete(0, END)
        msg = cPickle.dumps(msg)
        self.inqueue.put(msg)
        self.sock.send(msg)

    def call(self):
        self.processData()
        self.after(100,self.call)

    def cmdloop(self):
        while 1:
            sys.stdout.flush()
            # Wait for input from stdin & socket
            inputs, outputs, excepts = select.select([0,self.sock],[],[])

            for i in inputs:
                if i == 0:
                    data = sys.stdin.readline()
                    msg = Message(self.nickname,0,data)
                    msg = cPickle.dumps(msg)
                    self.inqueue.put(msg)
                    self.sock.send(msg)

                elif i == self.sock:
                    data = self.sock.recv(1024)
                    self.inqueue.put(data)

    def processData(self):
        while self.inqueue.qsize():
            try:
                msg = self.inqueue.get(0)
                msg = cPickle.loads(msg) 
                self.text.insert(END, msg.getusr()+": "+msg.getmsg())
                self.text.yview(END)
            except Queue.Empty:
                pass

if __name__ == "__main__":
    root = Tk()
    root.title("textarea")
    client = GUI(sys.argv[1],int(sys.argv[2]),root)
    root.mainloop()
from Tkinter import *
import socket

master = Tk()

entry = Entry(master)
entry.pack()

def process(data):
    print "processing: {0}".format(data)

def stdin_callback(fd, mask):
    print "stdin"
    data = sys.stdin.readline()
    process(data[:-1])

def socket_callback(fd, mask):
    print "socket"
    try:
        data= sock.recv(1024)
        if data:
            process (data)
        else:
            close_socket ()
    except socket.error as ex:
        close_socket ()

def close_socket():
    #closing socket without removing filehandler may hurt
    sock.close()
    master.deletefilehandler(fileno)

def entry_callback(event):
    print "entry"
    process(event.widget.get())

entry.bind("<Return>", entry_callback)
master.createfilehandler(sys.stdin,READABLE, stdin_callback)

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("localhost", 5678))
fileno = sock.fileno()
master.createfilehandler(fileno, READABLE, socket_callback)

master.mainloop()
def cmdloop():
    (sread, swrite, sexc) = select.select( [sock], [], [], 0)
    for s in sread:
        ...
        ...
        ...
    app.after(500,cmdloop)
def sendMsg(event=''):
    message = inputBox.get()
    message += "\n"
    msg = Message(nickname,0,message,None) #Custom Class
    sock.send(pickle.dumps(msg))
    inputBox.delete(0,END)
    return