问题描述
因此,我试图同时使用win32gui和Pandas来获取打开的Windows的数据帧(df)。 以下是我写的内容,但df最终为空。在测试时,我打开了8个窗口,并希望获得至少包含8行的df。
import win32gui
import pandas as pd
df= pd.DataFrame(columns = ['ID','Window'])
def winEnumHandler( hwnd,ctx ):
df= pd.DataFrame(columns = ['ID','Window'])
if win32gui.IsWindowVisible( hwnd ) and len(win32gui.GetwindowText( hwnd ))>0 :
idv = hex(hwnd)
winv = win32gui.GetwindowText(hwnd)
#print (hex(hwnd),",win32gui.GetwindowText(hwnd))
df = df.append({'ID' : idv,'Window': winv},ignore_index=True)
win32gui.EnumWindows( winEnumHandler,None )
print (df)
解决方法
因此从函数中获取数据帧的关键是使用全局变量。这个变量必须在函数内部状态为全局变量,所以不会混淆,python 不会将其视为局部变量。这是代码。
import win32gui
import pandas as pd
dfx = pd.DataFrame()
i = 0
def winEnumHandler( hwnd,x ):
global dfx,i
if win32gui.IsWindowVisible( hwnd ) and len(win32gui.GetWindowText( hwnd ))>0 :
idv = hex(hwnd)
winv = win32gui.GetWindowText(hwnd)
df = pd.DataFrame({'ID' : idv,'Window': winv},index = [i])
frames = [dfx,df]
dfx = pd.concat(frames)
i += 1
win32gui.EnumWindows( winEnumHandler,i )
print(dfx)