実行してもうまく動かず、どこを直したらよいかわからないため、教えていただけないでしょうか?
まず、GUIを使う場合、kansuu
関数のような無限ループしたりsleepするような処理をしてはいけません。これをしている間ウィンドウのイベント処理(ウィンドウの移動、再描画、ウィンドウ上のボタン操作など)がすべて行われなくなります。
必要な処理を行ったら速やかに関数からreturnする必要があります。
チェックボックスが押されたとき、にするべき処理は「ONであればタイマー処理を開始する」、「OFFであればタイマー処理を止める」です。
tkinterにおけるタイマー開始はafter関数です。この関数を呼び出すと指定した時間の後に任意の関数を呼び出してくれます。また、一回呼び出すとタイマーは終わってしまうので再度、開始します。
tkinterにおけるタイマー停止はafter_cancel関数です。この関数はafter関数の戻り値を指定する必要があります。
あと、ウィンドウを作るときはクラスを使ったほうが良いです。
これらを踏まえるとこんな感じになります。
Python
1# -*- coding: utf-8 -*-
2import tkinter as tk
3import time
4
5class MyFrame(tk.Tk):
6 interval = 500
7
8 def __init__(self):
9 super().__init__()
10
11 self.geometry('300x200')
12
13 self.bln = tk.BooleanVar()
14 self.bln.set(False)
15 self.Check = tk.Checkbutton(self, variable=self.bln,text="一定時間ごとに実行",command=self.kansuu)
16 self.Check.grid(row=1, column=0,sticky="news")
17
18 self.timer = None
19
20 def kansuu(self):
21 if self.bln.get():
22 print('タイマー開始')
23 self.timer = self.after(self.interval, self.check1)
24 else:
25 print('タイマー停止')
26 self.after_cancel(self.timer)
27 self.timer = None
28
29 def check1(self):
30 if self.bln.get():
31 print('チェックされています')
32 else:
33 print('チェックされていません')
34
35 self.timer = self.after(self.interval, self.check1)
36
37root = MyFrame()
38
39root.mainloop()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/22 11:58