首页 > 解决方案 > 如何使用python返回if in的所有输出

问题描述

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

但是由于某种原因,我无法将结果返回为 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 行中返回的原因是,如果我在函数外部调用它,它只会返回输出的最后一行。

标签: pythonpython-3.xwin32gui

解决方案


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

推荐阅读