PythonWin сохранение состояния сеанса - PullRequest
0 голосов
/ 04 сентября 2010

Я хотел бы иметь возможность сохранить мое состояние сеанса в редакторе PythonWin (например, эти три файла открываются и размещаются в этих конкретных местах в окне PythonWin).Я могу получить дескрипторы для каждого из дочерних окон в PythonWin, используя win32gui, а также названия каждого из файлов и положения / размеры окон.Мне неясно, как получить полный путь к файлу, указанному в качестве имени дочернего окна (т. Е. Если имя дочернего окна - test.py и test.py живет в c: \ python \ test.py, я незнаю, как получить c: \ python).Я думал, что напишу, какие файлы были открыты, плюс их позиции окна, в небольшой файл, который я затем вызову во время запуска PythonWin для загрузки.

Любые идеи о том, как получить полные пути к дочернему окнуимена?

В качестве альтернативы, если у кого-то уже есть более элегантное решение для сохранения состояния сеанса в PythonWin, пожалуйста, передайте его.

Ниже приведен код, который я сейчас использую (спасибо Михалу Никласу за стартеркод для использования win32gui ).


import win32gui
import re

MAIN_HWND = 0

def is_win_ok(hwnd, starttext):
    s = win32gui.GetWindowText(hwnd)
    if s.startswith(starttext):
        global MAIN_HWND
        MAIN_HWND = hwnd
        return None
    return 1


def find_main_window(starttxt):
    global MAIN_HWND
    win32gui.EnumChildWindows(0, is_win_ok, starttxt)
    return MAIN_HWND


def winPos(hwnd):
    if  type(hwnd) == type(1): ( left, top, right, bottom ) = win32gui.GetWindowRect(hwnd)
    return "%i, %i, %i, %i" % (left, right, top, bottom)


def winName(hwnd, children):
    s = win32gui.GetWindowText(hwnd)

    rePy = re.compile(r'[a-zA-Z1-9_ ]*.py')
    rePySearch = rePy.search(s)

    if rePySearch is not None:
        if rePySearch.group()[0:7] != "Running":
            s = s + ',' + winPos(hwnd) + '\n'
            children.append(s)
    return 1

def main():

    children = []
    main_app = 'PythonWin'
    hwnd = win32gui.FindWindow(None, main_app)

    if hwnd < 1:
        hwnd = find_main_window(main_app)

    if hwnd:
        win32gui.EnumChildWindows(hwnd, winName, children)

    filename = "sessionInfo.txt"
    sessionFile = os.path.join(sys.path[0],filename)

    fp=open(sessionFile, 'wb')
    for i in range(len(children)):
        fp.write(children[i])
    fp.close()

main()

1 Ответ

0 голосов
/ 05 сентября 2010

Я могу ошибаться, но разве PythonWin не написан на Python?

Вы пытались прочитать исходный код команды "Сохранить", чтобы выяснить, где он хранит свои полные пути?

(Я бы посмотрел сам, но я не использовал Windows в течение полувека)

...