Зависает форма ткинткер

Рейтинг: 0Ответов: 0Опубликовано: 24.08.2023

Первый раз запустил форму, выбило окно разрешения использования сети(или как там), в следующие разы при нажатии на кнопку создания сервера, форма зависает. Как решить это

class ServerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Server Program")
        self.create_widgets()

    def create_widgets(self):
        self.server_socket_label = ttk.Label(self.root, text="Server Socket (TCPServer)")
        self.server_socket_label.pack()

        self.port_label = ttk.Label(self.root, text="Server Port:")
        self.port_label.pack()

        self.port_entry = ttk.Entry(self.root)
        self.port_entry.pack()

        self.connection_label = ttk.Label(self.root, text="Client Not Connected", justify="left")
        self.connection_label.pack()

        self.login_label = ttk.Label(self.root, text="Login:")
        self.login_label.pack()

        self.login_entry = ttk.Entry(self.root)
        self.login_entry.pack()

        self.password_label = ttk.Label(self.root, text="Password:")
        self.password_label.pack()

        self.password_entry = ttk.Entry(self.root, show="*")
        self.password_entry.pack()

        self.start_button = ttk.Button(self.root, text="Start Server", command=self.start_server)
        self.start_button.pack()

        self.image_frame = ttk.Frame(root)
        self.image_frame.pack(padx=10, pady=10)

        self.image_label = ttk.Label(self.image_frame, text="Image:")
        self.image_label.pack()

        self.image = ttk.Label(self.image_frame)
        self.image.pack()

        self.text_frame = ttk.Frame(root)
        self.text_frame.pack(padx=10, pady=10)

        self.text_label = ttk.Label(self.text_frame, text="Text:")
        self.text_label.pack()

        self.text = tk.Text(self.text_frame, height=5, width=40)
        self.text.pack()

        self.table_frame = ttk.Frame(root)
        self.table_frame.pack(padx=10, pady=10)

        self.data_treeview_label = ttk.Label(self.table_frame, text="Data Grid")
        self.data_treeview_label.pack()

        self.data_treeview = ttk.Treeview(self.table_frame)
        self.data_treeview.pack()

    

    def start_server(self):
        try:
            port = int(self.port_entry.get())
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.server_socket.bind(('0.0.0.0', port))
            self.server_socket.listen(1)

            self.connection_label.config(text="Server is running, waiting for connection...")

            while True:
                client_socket, client_address = self.server_socket.accept()
                self.client_connected = True
                self.connection_label.config(text=f"Connected client: {client_address}")

                client_thread = threading.Thread(target=self.handle_client, args=(client_socket,))
                client_thread.start()
        except Exception as e:
            self.connection_label.config(text="Error during connection")

    def handle_client(self, client_socket):
        while True:
            command = client_socket.recv(1024).decode()

            if command == "color":
                color = colorchooser.askcolor()[1]
                self.root.configure(bg=color)
            elif command == "font":
                font_tuple = font.families()
                selected_font = font_tuple[0]
                self.connection_label.config(font=(selected_font, 12))
            elif command == "text":
                file_path = filedialog.askopenfilename()
                with open(file_path, "r") as file:
                    text = file.read()
                self.text.delete('1.0', tk.END)
                self.text.insert(tk.END, text)
            elif command == "image":
                file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.png *.jpg *.jpeg")])
                img = tk.PhotoImage(file=file_path)
                self.image.config(image=img)
                self.image.image = img


root = tk.Tk()
app = ServerApp(root)
root.mainloop()

Ответы

Ответов пока нет.