Seite 1 von 1

Tk + win32gui

Verfasst: Sonntag 9. September 2012, 12:57
von wg01
Hi Leute,

kann mit jemand einen Tipp geben, warum im unten stehenden Code die Funktion 'WingetByTitle', ausgeführt im Main thread, ein Ergebnis liefert, die selbe Funktion in GUIclass (Thread-1), Button command=WingetByTitle, jedoch loopt?

Danke fürs Lesen
Wolf

Code: Alles auswählen

import win32gui, threading
from Tkinter import Tk, Button
    
################################################################################    

class GUIclass(threading.Thread):
    def __init__(self):
        self.root = Tk()
        self.root.geometry('300x70')    
        self.root.title('*** ShowWindows ***')
        Button(self.root, command=WingetByTitle, text='ShowWindows').pack()
        threading.Thread.__init__(self)

    def run(self):
        self.root.mainloop()
################################################################################

def WingetByTitle(title='PyDev'):
    topWindows = []
    print("WingetByTitle '%s'" %(title))
    win32gui.EnumWindows(winEnumHandler, topWindows)
    for e in topWindows:
        print("e=%s %s" %(e[0], e[1]))
        if (title in e[1]):
            print("found: handle=%s, title=%s\n" %(e[0], e[1]))          
            return
    return
#-------------------------------------------------------------------------------
def winEnumHandler(hwnd, resultList):
    t = win32gui.GetWindowText(hwnd)
    if (t):
        resultList.append((hwnd, t))
        return(hwnd)
    return(None)
################################################################################    

WingetByTitle(title='PyDev')         # liefert Ergebnis

GUI = GUIclass()
GUI.start()
################################################################################    


Re: Tk + win32gui

Verfasst: Sonntag 9. September 2012, 13:19
von BlackJack
@wg01: Auf die GUI darfst Du nur aus dem Hauptthread zugreifen. Alles andere führt zu undefiniertem Verhalten.

Du hast ein paar Klammern zu viel in dem Quelltext. Bei ``if`` braucht man keine und ``print`` und ``return`` sind keine Funktionen sondern Anweisungen. Die so zu schreiben als wären es Funktionen ist verwirrend. Ein „nacktes” ``return`` als letzte Zeile einer Funktion ist überflüssig.

Für der Namensgebung könntest Du mal einen Blick in den PEP 8 -- Style Guide for Python Code werfen.

Re: Tk + win32gui

Verfasst: Sonntag 9. September 2012, 14:30
von wg01
Danke, und den Sytleguide werd ich mir zu Gemüte führen.

Wolf