ich habe ein kleines script, das in einem bestimmten intervall immer was tun soll.
Es macht ein Fenster auf. Dort kann man den Intervall starten und stoppen.
Funktioniert in meiner Entwicklungumgebung (ubuntu) prima.
Das script muss aber letztendlich auf einem WinXP laufen.
Dort bekomme ich folgende Fehlermeldung, wenn ich auf Start drücke:
This application has requested the Runtimeo terminate it in an unusual way.
Dann geht nix mehr. Was kann denn das sein.
Auf dem Linux habe ich:
Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15) [GCC 4.4.1] on linux2
Auf XP:
Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on win32
Hier mein script:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""
import threading
import time
import Tkinter
import sys
import string
import kinterbasdb
import types
import re
import datetime
def lets_rock( i, meldung_1, meldung_2, meldung_3 ):
print "lets_rock " + str( i )
meldung_1.set( "Logging laeuft (%s)" % i )
meldung_2.set( "A" )
meldung_3.set( "B" )
class engine(threading.Thread):
""" Simulierte Schrittmotorsteuerung """
def __init__(self, engine_message_1 = None, engine_message_2 = None, engine_message_3 = None ):
print "engine_init"
"""
switch = threading.Event
engine_message = Rückgabe als Tkinter.StringVar, damit eine
Meldung in einem Label angezeigt werden kann.
"""
threading.Thread.__init__(self)
self.switch = threading.Event()
self.engine_message_1 = engine_message_1
self.engine_message_2 = engine_message_2
self.engine_message_3 = engine_message_3
self.canceled = False
#self.interval = int ( db.po_logging_config_2[2] )
self.interval = 4
def run(self):
""" Der Motor wird initialisiert. Enthaelt die Steuerschleife. """
i = 0
while True:
# Hier wird darauf gewartet, dass der switch
# eingeschaltet wird.
self.switch.wait()
if self.canceled:
break
i += 1
lets_rock( i, self.engine_message_1, self.engine_message_2, self.engine_message_3 )
#if self.engine_message_1:
#self.engine_message_1.set( "Logging laeuft (%s)" % i)
#print "Logging laeuft (%s)" % i
#else:
print "Logging laeuft (%s)" % i
time.sleep( self.interval )
def engine_start(self):
""" Schaltet den Motor ein """
self.switch.set()
def engine_stopp(self):
""" Stoppt den Motor aus """
print "stopp"
self.switch.clear()
def engine_aus(self):
""" Schaltet den Motor aus """
self.canceled = True
print "close"
self.switch.set()
class main_form(Tkinter.Tk):
""" GUI """
def _center(self, *args):
""" Zentriert das Fenster """
xpos = (self.winfo_screenwidth() - self.winfo_width()) / 2
ypos = ((self.winfo_screenheight() - self.winfo_height()) / 2) / 100 * 90
self.wm_geometry("+%d+%d" % (xpos,ypos))
def engine_aus(self):
""" Schaltet die Schleife aus und schliesst das Fenster """
self.engine.engine_aus()
self.destroy()
def __init__(self):
""" Anzeigen und initialisieren """
# Init
Tkinter.Tk.__init__(self)
self.engine_message_1 = Tkinter.StringVar()
self.engine_message_2 = Tkinter.StringVar()
self.engine_message_3 = Tkinter.StringVar()
self.title("Play-Out-Logging")
# Engine initialisieren
self.engine = engine(self.engine_message_1, self.engine_message_2, self.engine_message_3 )
self.engine.start()
# Fenster und Buttons
self.config(bd = 10)
# Label
label_1 = Tkinter.Label(
self,
bg ="white",
textvariable = self.engine_message_1,
bd = 2,
width = 120
).pack()
label_2 = Tkinter.Label(
self,
bg ="white",
textvariable = self.engine_message_2,
bd = 2,
width = 120
).pack()
label_3 = Tkinter.Label(
self,
bg ="white",
textvariable = self.engine_message_3,
bd = 2,
width = 120
).pack()
frame = Tkinter.Frame(self)
frame.pack()
Tkinter.Button(
frame,
text = "Start",
command = self.engine.engine_start,
bd = 2
).grid(row = 2, column = 0)
Tkinter.Button(
frame,
text = "Stopp",
command = self.engine.engine_stopp,
bd = 2
).grid(row = 2, column = 1)
# Aus
Tkinter.Button(
frame,
text = "Close",
command = self.engine_aus,
bd = 2
).grid(row = 2, column = 2)
# Warten bis das Fenster zentriert wird und dann anzeigen
self._center()
self.wait_visibility()
if __name__ == "__main__":
print "lets_work"
fenster = main_form()
Tkinter.mainloop()
print "lets_lay_down"
sys.exit(0)