J'aimerais pouvoir enregistrer mon état de session dans l'éditeur PythonWin (par exemple, ces trois fichiers sont ouverts et positionnés dans ces emplacements particuliers dans la fenêtre PythonWin). Je peux obtenir des poignées pour chacune des fenêtres enfants dans PythonWin en utilisant win32gui, ainsi que les titres de chacun des fichiers et les positions/tailles des fenêtres. Je ne comprends pas comment obtenir le chemin d'accès complet du fichier listé comme nom de la fenêtre enfant (par exemple, si le nom de la fenêtre enfant est test.py et que test.py réside à c: \ python \ test.py, je ne sais pas savoir comment obtenir c: \ python). Je pensais que j'écrirais quels fichiers ont été ouverts plus leurs positions de fenêtre dans un petit fichier que j'appellerais alors à l'heure de démarrage de PythonWin pour le chargement.Etat de la session d'enregistrement PythonWin
Des idées sur la façon d'obtenir les chemins d'accès complets aux noms de la fenêtre enfant?
Si quelqu'un a déjà une solution plus élégante pour sauvegarder l'état de session dans PythonWin, veuillez le transmettre. Voici le code que j'utilise en ce moment (merci à Michal Niklas pour le code de démarrage pour l'utilisation 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()
Je pense qu'il est écrit en C++, mais peu importe, bonne idée. Je regarde maintenant. Merci pour le conseil. –