变量线程和tkinter的Python / Update值

时间:2017-10-16 21:07:40

标签: python multithreading tkinter

我遇到一个问题,在我的开发过程中让我失望很多.. 实际上,我无法使用python的Threading模块更新Queue! 我搜索了几个站点,我找不到可能阻止我的变量更新的错误。

我的tkinter按钮应该允许我运行另一个python脚本。为此,我使用线程,这样我就可以使用GUI而不会中断它。

我解释了我的问题:

我的tkinter按钮应该允许我运行另一个python脚本。为此,我使用线程,因此我可以使用GUI而不会被中断。另一个按钮应该允许我更新队列,这就是动作不能做的事情。

我使用Tkinter的主要脚本:

import Tkinter, cv2
from Tkinter import *
from threading import Thread
import threading, Queue
import pyautogui, os, time, urllib2, urlparse
import cv2
from yes2 import *

def print1():
    global kill, q
    kill = []
    q = Queue.Queue()
    q.put("True")
    thread = Thread(target = main, args=(kill, q))
    thread.start()
def stop():
    global q
    q.put("False")
    print q.get()



root = Tkinter.Tk()
root.title('breakable')

bouton= Button(root, text="Run", command=print1)
bouton.grid(row=3, column=0)

bouton= Button(root, text="stop", command=stop)
bouton.grid(row=3, column=1)

root.mainloop()

我想打开另一个脚本:

def main(kill, q):

    while True:
        try:
            get = q.get(timeout=2)
            print get
        except Empty as error:
            print("Error too many times")

出现的值是" True",但是当我点击我的停止按钮时,它应该更新我的队列" False",它什么都不做

提前致谢:)

1 个答案:

答案 0 :(得分:1)

它确实更新了您的队列,但在下一行,您get再次输出值。从“停止”功能中删除print q.get()