Seite 1 von 1

thread funktiniert nicht

Verfasst: Samstag 11. Juni 2005, 13:11
von 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.