如何 return if in with python 的所有输出

How to return all output from if in with python

我正在尝试 return 基于名称的所有 windows 位置的输出,我已经做到了。

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

代码:

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)

我真的很想将此 returned 作为实际的元组列表。类似这样的事情:

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

我想要它 return 在 1 行中的原因是,如果我在函数外调用它,它只会 return 输出的最后一行。

您可以通过包含全局(函数外部)变量来收集所有条目。在这里,列表 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"))