Lỗi treo máy khi dùng thư viện tkinter

Client code:

import tkinter as tk
from tkinter.filedialog import asksaveasfilename
import tkinter.messagebox
from PIL import Image
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

def ConnectToServer():
    HOST=entry.get()
    PORT=65432
    test=True
    try:
        s.connect((HOST,PORT))
    except Exception as e:
        tkinter.messagebox.showerror(title="Lỗi",message="Lỗi kết nối đến server")
        test=False
    if test:
        tkinter.messagebox.showinfo(title="Thông báo",message="Đã kết nối tới server thành công")
def takeScreen():
    msg="TAKEPIC"
    s.sendall(bytes(msg,"utf8"))
    file = open('server_image.jpg', "wb")
    image_chunk = s.recv(2048)
    while image_chunk:
        file.write(image_chunk)
        image_chunk = s.recv(2048)

    file.close()


root = tk.Tk()
canvas1 = tk.Canvas(root, width=300, height=300)
canvas1.pack()
entry=tk.Entry()
myButton_connect=tk.Button(text="Connect",command=ConnectToServer)
myButton_TakePic = tk.Button(text="Take screenshot", command=takeScreen, font=10)
myButton_Process = tk.Button(text="Process Running", command=ProcessRunning, font=10)
myButton_Exit=tk.Button(text="Thoat",command=Thoat,font=10)
canvas1.create_window(150,50,window=entry)
canvas1.create_window(150, 100, window=myButton_TakePic)  # dùng để tạo các button để click
canvas1.create_window(150, 150, window=myButton_Process)
canvas1.create_window(250,50,window=myButton_connect)
canvas1.create_window(150,200,window=myButton_Exit)
root.mainloop()

Server code:

def pic():

    myScreenshot=pyautogui.screenshot()

    save_path=asksaveasfilename()

    myScreenshot.save(save_path+"_capture1.png")

    return save_path+"_capture1.png"

HOST=''
PORT=65432
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((HOST,PORT))
s.listen()
while True:
    conn,addr=s.accept()
    while True:
        data=conn.recv(1024).decode("utf8")
        if data=="TAKEPIC":
            path=pic()
            im=Image.open(path)
            im.show()
            file=open(path,'rb')
            img_data=file.read(2048)
            while img_data:
                conn.send(img_data)
                img_data=file.read(2048)
            file.close()   
        elif data=="app running":
            Process(conn)   
        elif data=="QUIT":
            break;
    break;

s.close()    
print("Server ngat ket noi")

image
Sau khi em nhấn nút “Take screenshot” xong thì chương trình bên server nó vẫn thực hiện chụp ảnh và lưu được, sau đó nó gửi cho client vẫn thành công( vì em đã mở ảnh đó lên được).

Nhưng vẫn đề là nó xuất hiện 1 hộp thoại như này:

và làm chương trình của em treo. Khi em nhấn nút close trên hộp thoại con thì xuất hiện
image

Nếu em chọn Try to restore … thì:
bên Server sẻ xuất hiện lỗi:


bên client sẻ xuất hiện lỗi:

Nếu em chọn Close the program thì chỉ bên client mới báo lỗi như trên còn server thì k

Mong mọi người chỉ dẫn cho em. Em mới học python ạ.

Vậy bạn đã thử search lỗi trên google chưa? Mình đã thử search lỗi của bạn và ra một số kết quả:

Chốt lại:

It could be the remote browser stopped responding, the network connection died, or a firewall closed the connection because it was open too long, or any other number of reasons.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?