teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正2

2020/08/23 21:43

投稿

Reach
Reach

スコア735

answer CHANGED
@@ -70,4 +70,7 @@
70
70
 
71
71
  w = Window()
72
72
  w.root.mainloop()
73
- ```
73
+ ```
74
+
75
+ 本来の目的の実装の為には
76
+ conductMain 関数の手直しが 必要かもしれません‥‥

1

修正

2020/08/23 21:43

投稿

Reach
Reach

スコア735

answer CHANGED
@@ -1,2 +1,73 @@
1
+ afterだけでなく update を挟みました
2
+ ```Python
3
+ # -*- coding: utf-8 -*-
4
+
5
+ from tkinter import *
6
+ import tkinter as tk
7
+ from tkinter import ttk
8
+ import time
9
+
10
+
11
+ class Window:
12
+ def __init__(self):
13
+ self.root = Tk()
14
+ self.root.title("サンプル")
15
+
16
+ self.frame3 = ttk.Frame(self.root, padding=10)
17
+ self.frame3.grid(row=0,column=1,sticky=W)
18
+
1
- [Tkinterの使い方:after で処理を「遅らせて」or 処理を「定期 ...](https://daeudaeu.com/tkinter_after/)
19
+ self.button1 = ttk.Button(self.frame3, text="実行", command=self.conductMain)
20
+ self.button1.pack(fill = "x", padx=30, side = "left")
21
+
22
+ self.button2 = ttk.Button(self.frame3, text=("閉じる"), command=self.root.quit)
23
+ self.button2.pack(fill = "x", padx=30, side = "left")
24
+
25
+ self.frame4 = ttk.Frame(self.root, padding = 10)
26
+ self.frame4.grid(row=2,column=1,sticky=E)
27
+
28
+ self.sc = tk.Scrollbar(self.frame4)
29
+ self.sc.pack(side = RIGHT, fill = "y")
30
+
31
+ self.tx = tk.Text(self.frame4, width = 48, height = 5)
32
+ self.tx.pack()
33
+
34
+ self.tx["yscrollcommand"] = self.sc.set
35
+ self.sc["command"] = self.tx.yview
36
+
37
+
38
+ #テキストボックスに文字を出力する関数です
39
+ #文字を出力->改行->自動スクロール
40
+ def print_text(self,text):
41
+ self.tx.insert(END, text)
42
+ self.tx.insert(END, "\n")
43
+ self.tx.see(END)
44
+
45
+ #サーバに接続する関数ですが、質問簡単化のために割愛します
46
+ #実行は1回のみです
47
+ def connect_server(self):
48
+ pass
49
+
50
+ #サーバから文字列を取得する関数ですが、質問簡単化のために割愛します
51
+ #実行は繰り返し行われます
52
+ def get_text_from_server(self):
53
+ pass
54
+
55
+ #実行ボタンを押した際に実行されます
56
+ #処理内容は以下の通りです
57
+ #サーバに接続->文字列を取得->特定の文字列でなければwhile内を実行(例:end以外なら実行)
58
+ #whileの中身:文字列を表示->1秒待機
59
+ def conductMain(self):
60
+ self.connect_server()
61
+ i = 0
62
+ #実際はサーバから特定の文字列を取得した際に終了しますが、
63
+ #今回は簡単化のために3回実行したら終了するようにしています
64
+ while i < 3:
65
+ self.root.after(1000,self.print_text(i))
66
+ self.root.update()
67
+ i += 1
68
+
69
+ if __name__ == "__main__":
70
+
2
- とか 使えないでしょうか?
71
+ w = Window()
72
+ w.root.mainloop()
73
+ ```