所以这是交易。我有一个按钮。该按钮触发while循环并打开一个带有“取消”按钮的新窗口。通过该取消按钮,我想终止while循环。
新方法:
def process():
parent,child = Pipe()
p = process(target=new_window(),args=(child))
p.start()
parent.send("True")
while true:
if child.recv()!="False":
do something
else:
p.join()
def new_window(p):
id = "cancel"
window = Toplevel(root)
window.geometry("240x160")
state = p.recv()
def closewindow():
global state
state = "False"
p.send(state)
window.destroy()
label = Label(window, text="Überwache...").place(x=90,y=60)
buttonc = Button(window,text="Abbrechen!",fg="black",command=closewindow).place(relx=0.35, rely=0.5)
这个想法是父(def进程)执行while循环,只要它没有从子进程(new_window)得到“False”。 你看到有什么错误吗?现在无法测试,因为替换我的占位符的代码“做某事”是另一项艰巨的任务......
旧帖子:
状态变量
state = bool(True)
触发循环和新窗口的按钮
button3 = Button(containerd,text="Starte Überwachung",fg="black",height=10,width=16,command=sound)
功能新窗口
def new_window():
id = "cancel"
window = Toplevel(root)
window.geometry("240x160")
def closewindow():
global state
state = bool(False)
window.destroy()
label = Label(window, text="Überwache...").place(x=90,y=60)
buttonc = Button(window,text="Abbrechen!",fg="black",command=closewindow).place(relx=0.35, rely=0.5)
循环功能
def sound():
global inp
global state
new_window()
while state:
l,data = inp.read()
if l > 60:
subprocess.call(['/home/pi/RPi_Cam_Web_Interface/cycle.sh'],shell=True)
else:
continue
问题是新窗口永远不会打开。 while循环使按钮/程序“被占用”。任何想法如何解决这个问题?