質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

解決済

tkinterでクリックした後の送信logがtext boxに表示されない

trafalbad
trafalbad

総合スコア302

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

1回答

0評価

0クリップ

102閲覧

投稿2022/05/18 14:44

udp通信でclient側から時刻を送信します。
受け取るserverはtkinterのGUI上でスクロールバーに徐々に表示されていくようになっています。

以下のように実行しても、コンソール上では動作しているのですが、
GUIのスクロールバーに logが表示されず、終了のためにSfit+commad+Rを押して例外処理でKeyboardInterrupt:を通ったときに一瞬表示されます。

おそらく表示用のtext boxがupdateされていないのが原因のような気がするのですが、解決策を教えていただけないでしょうか?よろしくお願いします。

client.py

python

import socket import datetime M_SIZE = 1024 serv_address = ('127.0.0.1', 8890) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: try: message = now = str(datetime.datetime.now()) send_len = sock.sendto(message.encode('utf-8'), serv_address) # ※sendtoメソッドはkeyword arguments(address=serv_addressのような形式)を受け付けないので注意 # ③Serverからのmessageを受付開始 print('Waiting response from Server') rx_meesage, addr = sock.recvfrom(M_SIZE) print(f"[Server]: {rx_meesage.decode(encoding='utf-8')}") except KeyboardInterrupt: print('closing socket') sock.close() print('done') break

server.py

python

from tkinter import messagebox, ttk, Text, filedialog import tkinter as tk import os import time import datetime import socket M_SIZE = 1024 class Application(tk.Frame): def __init__(self, host, port, master): super().__init__(master) self.master.geometry("1280x768") self.master.title("Tkinter with Video Streaming and Capture") self.locaddr = (host, port) self.create_socket() self.create_widgets() def create_socket(self): self.sock = socket.socket(socket.AF_INET, type=socket.SOCK_DGRAM) self.sock.bind(self.locaddr) def create_widgets(self): frame = ttk.Frame(self.master, padding=10) frame.grid() refer_button = ttk.Button(frame, text=u'出力ボタン', command=self.server) refer_button.grid(row=3, column=1) self.log = Text(self.master, state='disabled',borderwidth=5, width=70, height=30, wrap='none', padx=10,pady=10) ys = ttk.Scrollbar(self.master, orient = 'vertical', command = self.log.yview) self.log['yscrollcommand'] = ys.set self.log.grid(row=4, column=0) ys.grid(column = 1, row = 4, sticky = 'ns') def writeToLog(self, msg): self.log['state'] = 'normal' self.log.insert('end', str(msg)+'\n') self.log['state'] = 'disabled' def server(self): while True: try: print('Waiting message') message, cli_addr = self.sock.recvfrom(M_SIZE) message = message.decode(encoding='utf-8') self.writeToLog(message) print(f'Received message is [{message}]') time.sleep(1) print('Send response to Client') self.sock.sendto('Success to receive message'.encode(encoding='utf-8'), cli_addr) except KeyboardInterrupt: self.sock.close() break if __name__ == "__main__": root = tk.Tk() app = Application('127.0.0.1', 8890, root)#Inherit app.mainloop()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。