Tk + win32gui

Fragen zu Tkinter.
Antworten
wg01
User
Beiträge: 7
Registriert: Sonntag 19. August 2012, 11:35

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()
################################################################################    

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.
wg01
User
Beiträge: 7
Registriert: Sonntag 19. August 2012, 11:35

Danke, und den Sytleguide werd ich mir zu Gemüte führen.

Wolf
Antworten