thread funktiniert nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Holly

Habe meien Eintrag im flaschen Forum eingetragen, hier nochmal mien Problem mit lauffähigem Code:

Code: Alles auswählen

from Tkinter import * 
import string
import win32com.client #fuer Excel
import time
import thread
#**********************************************************************************************

def sleepFunction( msg, seconds, ):
    textfenster.insert(END, msg)
    while bitAutolog==1:
        textfenster.insert(END,"\nSleep ? -->")
        time.sleep(seconds)
        connect_it()
            
def connect_it():
      global z
      textfenster.insert(END,"\nVerbindung ? ")
      
      if exportieren == 1:
        try:
            z=z+1
            textfenster.insert(END," hat ")
            worksheet.Cells(z,1).Value = "Excel Test"+str(z)
            textfenster.insert(END,"geklappt")
           
        except:
            textfenster.insert(END," fehlgeschlagen ")
      else: textfenster.insert(END," ohne Export ")
      
def export_it():
    global exportieren

    if exportieren == 0:
        btnExport["bg"] = "green"
        btnExport["text"] ="Export on"
        textfenster.insert(END,'\nExport eingeschaltet ! \n')
        exportieren=1
        ExcelApp.visible = 1
       
    else :
        exportieren=0
        btnExport["bg"] = "grey"
        btnExport["text"] ="Export off"
        textfenster.insert(END,'\nExport ausgeschaltet ! \n')
        ExcelApp.visible = 0

def ende():
    ExcelApp.visible=0
    ExcelApp.Quit()                      # Beendet Excel 
    root.destroy()

def autolog_it():
    global bitAutolog

    if bitAutolog == 0:
        btnAutolog["bg"] = "green"
        btnAutolog["text"] ="Autolog on"
        bitAutolog=1
        thread.start_new_thread(sleepFunction,("\nAutologgen gestartet\n",2))
        
    else :        
        bitAutolog=0
        btnAutolog["bg"] = "grey"
        btnAutolog["text"] ="Autolog off"
        textfenster.insert(END,'\nAutolog ausgeschaltet ! \n')
           
#******************************************************************************************************************

strTime=time.strftime("%Y_%m_%d   %H_%M_%S")
root=Tk()                                                      
root.title('    DataLogControl')
root.wm_geometry('800x600+40+40')
ExcelApp=win32com.client.Dispatch("Excel.Application") 
ExcelApp.DisplayAlerts=0#  schaltet Benutzerabfragen ab
workbook = ExcelApp.Workbooks.Add()    # legt neuen Arbeitsbereich vom "Typ" Excel an.
worksheet=workbook.Worksheets('Tabelle1')        # Setzt den Focus auf die Mappe "Tabelle1"
ExcelApp.visible = 0# 1 Laesst Excel sichtbar werden damit man den Import mitverfolgen kann
z=2 #beginne in zweiter Zeile

exportieren=0#exportieren ausgeschaltet
bitAutolog=0#autolog ausgeschaltet

frameoben=Frame(root)
frameoben.pack(expand=YES, fill=BOTH) 
frameunten = Frame(root,bg='white') 
frameunten.pack(side=BOTTOM,expand=YES, fill=BOTH)
textfenster=Text(frameunten, height=40, bg='white')
textfenster.pack(expand=YES, fill=BOTH)

btnConnect=Button(frameoben,text='Connect_it',command=connect_it)
btnBeenden=Button(frameoben,text='Beenden',command=ende)
btnExport=Button(frameoben,text='Export',command=export_it)
btnAutolog=Button(frameoben,text='Auto Connect_it',command=autolog_it)


btnConnect.grid(row=5,column=1)
btnBeenden.grid(row=5,column=6)
btnExport.grid(row=5,column=3)
btnAutolog.grid(row=5,column=4)

root.mainloop()
Wenn ich die Funktion über einen Button hier Connect_it aufrufe:
btnConnect=Button(frameoben,text='Connect',command=connect_it)
funktioniert alles wunderbar.

Wenn ich die Funktion automatisch von einem Thread ausführen lassen möchte funktioniert sie nicht und bricht an der Stelle :
worksheet.Cells(z,1).Value="..."
ab.

Edit (Leonidas): Code in Python-Tags gesetzt.
Antworten