服务器应用程序冻结GUI

时间:2013-04-23 02:40:43

标签: python user-interface tkinter

这是我的服务器脚本,当没有GUI运行它时启动方法只有它工作正常但是当运行整个脚本时我按下开始按钮它只是冻结而没有响应,文本窗口中没有任何内容

from Tkinter import *

import socket
import sys

class Application(Frame):

def __init__(self, master):

    Frame.__init__(self, master)
    self.grid()
    self.create_widgets()

def create_widgets(self):

    self.text = Text(self, width = 35, height = 5, wrap = WORD)
    self.text.grid(row = 0, column = 0, columnspan = 2, sticky = W)

    self.submit_button = Button(self, text='start', command = self.start)
    self.submit_button.grid(row = 2, column = 0, sticky = W)

def start(self):

    self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.text.insert(0.0, 'Server started!\n' )
    self.s.bind(('',1080))
    self.s.listen(10)

    while True:
        sc, address = self.s.accept()
        i=1 
        f = open('file_'+ str(i)+".txt",'wb') #open in binary
        i=i+1
        while (True):       
            l = sc.recv(1024)
            while (l):
                print l 
                f.write(l) 
                f.flush()

        f.close()

        sc.close()


root = Tk()
root.title("Server")
root.geometry("500x250")
app = Application(root)
root.mainloop()

1 个答案:

答案 0 :(得分:1)

GUI工作的唯一方法是,它的事件循环能够为诸如响应重绘自身的请求,响应按钮等的事件提供服务。在Tkinter中,此事件循环为mainloop

单击开始按钮时,在此事件循环中运行不少于两个无限循环,只要这些内部无限循环正在运行,就会冻结事件循环。