如何使用python返回if in的所有输出



我正在尝试根据名称返回所有窗口位置的输出,我已经完成了。

然而,由于某些原因,我无法将结果返回为1行、元组列表等。我将在单独的行中返回输出(然后我不能将其作为一个整体使用(。

代码:

import win32gui as win
win_name = "SomeApplication"
def get_all_windows_locs(hwnd, lparam):
if win_name in win.GetWindowText(hwnd):
windows_locs = win.GetWindowRect(hwnd)
print(windows_locs)

win.EnumWindows(get_all_windows_locs, None)

输出:

(2, 2, 1162, 803)
(768, 1112, 1928, 1913)
(1421, 635, 2581, 1436)

我真的想把它作为元组的实际列表返回。大致如下:

(2, 2, 1162, 803), (768, 1112, 1928, 1913), (1421, 635, 2581, 1436)

我希望它在1行中返回的原因是,如果我在函数外调用它,它只返回输出的最后一行。

您可以通过包含全局(函数外部(变量来收集所有条目。这里,列表all_windows_locs:

import win32gui as win
all_windows_locs = []
win_name = "SomeApplication"
def get_all_windows_locs(hwnd, lparam):
if win_name in win.GetWindowText(hwnd):
windows_locs = win.GetWindowRect(hwnd)
all_windows_locs.append(windows_locs)
win.EnumWindows(get_all_windows_locs, None)
print(all_windows_locs)

为了避免变量污染全局命名空间,一个更好的解决方案可以在包装函数中捕获列表:


def all_windows_locs(win_name):
windows_locs_list = []
def test_window(hwnd, lparam):
if win_name in win.GetWindowText(hwnd):
windows_locs = win.GetWindowRect(hwnd)
windows_locs_list.append(windows_locs)

win.EnumWindows(test_window, None)
return windows_locs_list
print(all_windows_locs("SomeApplication"))

最新更新