【问题标题】:Python/ Update value of variable threading and tkinterPython/ 更新变量线程和 tkinter 的值
【发布时间】:2017-10-16 21:07:40
【问题描述】:

我遇到了一个问题,这大大减慢了我的发展速度.. 确实,我无法使用 python 的 Threading 模块更新队列! 我搜索了几个站点,但找不到可能阻止我的变量更新的错误。

我的 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”,它什么也没做

提前致谢:)

【问题讨论】:

    标签: python multithreading tkinter


    【解决方案1】:

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

    【讨论】:

    • 啊,是的,我很愚蠢 :( 非常感谢,我现在更好地理解了我的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2020-04-18
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多