で、私はしかし、それは)私が(pack_forgetを呼び出すたびにクラッシュするこの呼び出すpack_forget()スレッド
from tkinter import *
import threading, time
def cancel():
print ("Stop!")
def thread():
threading.Thread (target = new).start()
def new():
b.pack_forget()
c = Canvas (root, width = 200, height = 25, bg = "white")
c.pack()
Button (root, text = "OK", command = root.destroy).pack()
try:
for x in range (200):
time.sleep (0.02)
c.create_rectangle ((x, 2, x + 1, 26), outline = "green", fill = "green")
root.destroy()
except: pass
root = Tk()
root.title ("Threading")
b = Button (root, text = "Begin.", command = thread)
b.pack()
root.mainloop()
のように見えるのPythonプログラムを持っています。私はこのようにそれを行うことができます知っている:他のプログラムで
from tkinter import *
import threading, time
def cancel():
print ("Stop!")
def thread():
b.pack_forget()
threading.Thread (target = new).start()
def new():
c = Canvas (root, width = 200, height = 25, bg = "white")
c.pack()
Button (root, text = "OK", command = root.destroy).pack()
try:
for x in range (200):
time.sleep (0.02)
c.create_rectangle ((x, 2, x + 1, 26), outline = "green", fill = "green")
root.destroy()
except: pass
root = Tk()
root.title ("Threading")
b = Button (root, text = "Begin.", command = thread)
b.pack()
root.mainloop()
を、しかし、それはスレッドでpack_forgetを呼び出すことが可能です。ありがとう。
あなたの最初のブロックは私のために走りますが、いくつかの異なるスレッドからtkinterオブジェクトを制御することで過去に問題が発生しました。私はそれをすることをお勧めしません。スレッドの代わりにtkinterの 'after'メソッドを使うのはなぜですか? – Novel
これはデモプログラムです。私のフル・プログラムでは、終了までに時間がかかって大量に変化するコードに使用しています。 –
実際のプログラムでは、プログレスバーも制御しようとしていますか? tkinter変数を使用するとスレッドセーフなので、進行状況バーをIntVarに結び、別のスレッドからint_var.set()を呼び出すことができます。 – Novel