使用线程的python初学者屏幕截图
在经历了一些堆栈溢出和外部指南仍然被困在一个奇怪的问题后,线程启动但函数没有执行,但在unity c#和visual studio c#windows应用程序中使用了相同类型的设置,但在那里工作正常。任何帮助都将不胜感激使用线程的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
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()
本地的,并且您在(运行时)没有看到中隐藏的回溯:
。阅读相关内容并进行参观