Зависает форма ткинткер
Первый раз запустил форму, выбило окно разрешения использования сети(или как там), в следующие разы при нажатии на кнопку создания сервера, форма зависает. Как решить это
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()
Источник: Stack Overflow на русском