使用线程的python初学者屏幕截图

使用线程的python初学者屏幕截图,python,tkinter,python-multithreading,Python,Tkinter,Python Multithreading,在经历了一些堆栈溢出和外部指南仍然被困在一个奇怪的问题后,线程启动但函数没有执行,但在unity c#和visual studio c#windows应用程序中使用了相同类型的设置,但在那里工作正常。任何帮助都将不胜感激 import tkinter import threading import PIL import time from datetime import datetime from PIL import Image import pyscreenshot as ImageGrab

在经历了一些堆栈溢出和外部指南仍然被困在一个奇怪的问题后,线程启动但函数没有执行,但在unity c#和visual studio c#windows应用程序中使用了相同类型的设置,但在那里工作正常。任何帮助都将不胜感激

import tkinter
import threading
import PIL
import time
from datetime import datetime
from PIL import Image
import pyscreenshot as ImageGrab

from tkinter import *
from tkinter import messagebox
from tkinter import Tk, Label, Button, Entry
running=False
class app:
    def __init__(self, master):
        self.master = master
        self.thread1=threading.Thread(target=self.screenshot)
        master.title("Screenshot Taker")
        Label(master, text="Interval between screenshots").grid(row=0,sticky=W)
        self.E1=Spinbox(master, from_ = 5, to = 1000,state = "readonly")
        self.E1.grid(row=0,column=2,padx=10)
        Label(master, text="File prefix").grid(row=1,sticky=W)
        self.E2=Entry(master)
        self.E2.grid(row=1,column=2,padx=10)
        self.B1=Button(master, text="start" ,command = self.start)
        self.B1.grid(row=2,column=0,columnspan=3)
        self.B2=Button(master, text="stop" ,command = self.stop)
        self.B2.grid(row=2,column=1,columnspan=3) 
    def screenshot(self):
        while(running):
            im=ImageGrab.grab()
            dt_string = datetime.now().strftime("%d_%m_%Y_%H_%M_%S")
            name=str(self.E2.get())+str(dt_string)
            logging.debug(name)
            im.save(name+".png")
            time.sleep(int(self.E1.get()))
    def start(self):
        running=True
        self.thread1.start()

    def stop(self):
        running=False
        self.thread1.join()
root = Tk()
app = app(root)
root.resizable(False, False)
root.mainloop()```

要在python中访问全局变量,需要在需要访问它的每个函数中使用“global var_name”:

导入tkinter
导入线程
进口PIL
导入时间
从日期时间导入日期时间
从PIL导入图像
将pyscreenshot导入为ImageGrab
从tkinter进口*
从tkinter导入消息框
从tkinter导入Tk、标签、按钮、条目
运行=错误
类应用程序:
定义初始(自我,主):
self.master=master
self.thread1=threading.Thread(target=self.screenshot)
大师头衔(“截图者”)
标签(master,text=“截图间隔”).grid(行=0,粘性=W)
self.E1=Spinbox(主控,从0=5到=1000,state=“readonly”)
self.E1.grid(行=0,列=2,padx=10)
标签(master,text=“File prefix”).grid(行=1,粘性=W)
self.E2=条目(主)
self.E2.grid(行=1,列=2,padx=10)
self.B1=按钮(master,text=“start”,command=self.start)
self.B1.grid(行=2,列=0,列span=3)
self.B2=按钮(master,text=“stop”,command=self.stop)
self.B2.grid(行=2,列=1,列span=3)
def屏幕截图(自我):
全球运行
运行时:
im=ImageGrab.grab()
dt_string=datetime.now().strftime(“%d_%m_%Y_%H_%m_%S”)
name=str(self.E2.get())+str(dt_字符串)
logging.debug(名称)
im.save(名称+“.png”)
time.sleep(int(self.E1.get())
def启动(自):
全球运行
运行=真
self.thread1.start()
def停止(自):
全球运行
运行=错误
self.thread1.join()
root=Tk()
app=app(根目录)
根目录。可调整大小(False,False)
root.mainloop()

我认为您应该更好地描述您正在努力实现的目标。目前我不知道您期望的是什么。@henry实际上我的线程和目标函数“线程启动”没有正常工作:它没有正常工作,因为
running=True
def start()
本地的,并且您在(运行时)没有看到
中隐藏的回溯:
。阅读相关内容并进行参观