0
他の場所をクリックするとtkinter guiがフリーズし始めます。それを防ぐ方法はありますか?表示用ラベルはボタンそのものですので、私は「ラベル」という名前を付けます:他の場所をクリックするとtkinterがフリーズするのを防ぐ方法は?
#=========================
from tkinter import *
from time import sleep
import random
#=====================
root=Tk()
root.title("Wise Words")
root.geometry("500x180+360+30")
root.resizable(0,0)
root.call("wm", "attributes", ".", "-topmost", "1")
#===================
def display(random):
if random == 1:
return "Be wise today so you don't cry tomorrow"
elif random == 2:
return "Frustration is the result of failed expectations"
elif random == 3:
return "Wishes are possibilities. Dare to make a wish"
if True:
sleep(4)
r=random.randint(1,3)
sentence=display(r)
label.configure(text=str(sentence))
label.update_idletasks()
root.after(5000, display(random))
#==================
def Click(event):
display(random)
#======================
label=Button(root, fg="white", bg="blue", text="Click to start!",
font=("Tahoma", 20, "bold"), width=40, height=4,
wraplength=400)
label.bind("<Button-1>", Click)
label.pack()
#================
root.mainloop()
注:
は、ここに私のコードです。あなたのコード内でいくつかの奇妙なことをやっている
なぜ 'time.sleep'と' root.after'を使用していますか?また、それを参照する以外の 'random'モジュールで何もすることは決してありませんし、それが整数に等しいと期待しています(決してありません)。 – TigerhawkT3
私はtimeモジュールを削除しても、root.afterが5000に設定されていても遅滞なくループを開始しました。これは私が望むものではありません。ランダムモジュールを使用してディスプレイをランダム化します。 r = random.randint(1,3)、次にsentence = display(r)を参照してください。 –
ああ、私はあなたがどこで 'ランダム 'で何かをするのを見る。しかし、あなたはすぐにそれを再帰呼び出しで使用しています。そして、あなたは 'after'を通してその関数を_again_呼び出します。したがって、問題のある「スリープ」の後に再帰的に送信する有効な数値が1つあり、適切な 'after'を使って送信する無駄な値があります。それは良くありません。 – TigerhawkT3