実現したいこと
pythonチャットアプリでGUI画面でカウント表示したい
前提
チャットアプリのプログラミングしています。
pythonのtkinterで応答なしが発生してしまい
教えて頂きたいです。
プログラミング言語はpythonです。
1つのパソコンでアプリ間でチャットをしたいと思っています。
jupyterlabがクライアント
spyderがサーバーで
クライアントから数値をサーバーにソケット通信で
送ります。
サーバー側が入力数値からtkinterで数値の表示をします。
数値の入力がクライアントから無い状態があると
数値表示画面が応答なしになります。
after関数を使って数値表示しています。
マルチスレッドなど方法があると思います。
プログラミングが分からないので
ご教授お願いします。
該当のソースコード
python
コード # ソケット通信(サーバー側) import socket import tkinter as tk host1 = '127.0.0.1'#IPアドレスの設定 port1 = 8770#ポートの設定 #オブジェクト作成 socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket1.bind((host1, port1)) socket1.listen(1) print('クライアントからの入力待ち状態') # コネクションとアドレスを取得 connection, address = socket1.accept() print('接続したクライアント情報:' + str(address)) # 無限ループ byeの入力でループを抜ける recvline = '' sendline = '' #num = 0 counter = 0 #while True:#ループ def recv_time(label): def count(): global counter # クライアントからデータを受信 recvline = connection.recv(4096).decode()#4096データ受信サイズ try: counter = int(recvline) #print(counter) sendline = '入力して下さい。'.encode('utf-8')#'OKです' connection.send(sendline) label.config(text=str(counter)) label.after(1000,count) except ValueError as e: print(str(count)) count() root=tk.Tk() root.title("soket_count") root.geometry("300x300") label=tk.Label(root,width=3,font=("",30),bg="white",relief="groove",bd=1) recv_time(label) label.place(x=120,y=120) root.mainloop() #クライアント側 # coding: utf-8 # ソケット通信(クライアント側) import socket ip1 = '127.0.0.1'#IPアドレスの設定 port1 = 8770#ポートの設定8765 server1 = (ip1, port1) socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#AF_INET:IPv4指定 SOCK_STREAM:TCPプロトコル指定 socket1.connect(server1)#server接続 line = '' while line != 'bye': line = input('>>>') # サーバに送信 socket1.send(line.encode("UTF-8")) # サーバから受信 data1 = socket1.recv(4096).decode()#4096データ送信サイズ # サーバから受信したデータを出力 print('サーバーから: ' + str(data1)) #print('サーバーからの回答: ' + str(data1)) socket1.close() #print('クライアント側) ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー