Zwei Python-Skripts, mit tkinter und Überwachung auf neu angelegte Dateien, verheiraten
Verfasst: Mittwoch 5. August 2026, 17:37
Guten Tag liebe Python-Experten,
ich bin noch nicht allzu fit in Python und habe zwei Skripts geschrieben, um ein Verzeichnis auf neue Dateien zu überwachen und diese mit Irfanview anzuzeigen. Wenn ich die Dateien mit Irfanview sichten will, das passiert in einem Controlscript mit tkinter, ohne dass die Überwachung neue Dateien öffnet, muss ich die Überwachung pausieren.
Zzt koordiniere ich das mit einer Hilfsdatei: Soll die Überwachung pausieren, erzeuge ich diese Datei und wenn sie weiter machen soll, lösche ich sie. Funktioniert so weit.
Die Frage ist, ob ich beides in einem Skript zusammen legen kann und beides mit einer Variablen statt einer Hilfsdatei koordinieren. Und zwar auf einfache Weise ohne dass ich mich in Threads o. ä. einarbeiten muss.
Hier die Scripts, zunächst die Überwachung:
Und das Kontrollscript für das Sichten und Durchblättern.:
Und ein Configfile mit den gemeinsamen Variablen:
Vielleicht noch nicht perfekt, aber wie oben: Bin noch nicht vollständig fit in Python.
Beste Grüße, Ulrich
ich bin noch nicht allzu fit in Python und habe zwei Skripts geschrieben, um ein Verzeichnis auf neue Dateien zu überwachen und diese mit Irfanview anzuzeigen. Wenn ich die Dateien mit Irfanview sichten will, das passiert in einem Controlscript mit tkinter, ohne dass die Überwachung neue Dateien öffnet, muss ich die Überwachung pausieren.
Zzt koordiniere ich das mit einer Hilfsdatei: Soll die Überwachung pausieren, erzeuge ich diese Datei und wenn sie weiter machen soll, lösche ich sie. Funktioniert so weit.
Die Frage ist, ob ich beides in einem Skript zusammen legen kann und beides mit einer Variablen statt einer Hilfsdatei koordinieren. Und zwar auf einfache Weise ohne dass ich mich in Threads o. ä. einarbeiten muss.
Hier die Scripts, zunächst die Überwachung:
Code: Alles auswählen
import sys
import os
import time
import subprocess
from watchdog.events import FileSystemEvent, FileSystemEventHandler
from watchdog.observers import Observer
import lifeviewConfig as cfg
try:
class MyEventHandler(FileSystemEventHandler):
def on_created(self, event: FileSystemEvent) -> None:
print(event)
file=event.src_path
print(file)
if not os.path.isfile(cfg.pathControlFile):
print('open '+cfg.pathControlFile)
startArray = [
cfg.irfanViewPath,
file
]
subprocess.Popen(startArray)
event_handler = MyEventHandler()
observer = Observer()
observer.schedule(event_handler, cfg.lifeviewPath, recursive=False)
observer.start()
try:
while True:
time.sleep(1)
finally:
observer.stop()
observer.join()
except:
print("Error at line", sys.exc_info()[2].tb_lineno, sys.exc_info())
input()
Und das Kontrollscript für das Sichten und Durchblättern.:
Code: Alles auswählen
import sys
import os
import subprocess
import tkinter as tk
from functools import partial
import glob
import lifeviewConfig as cfg
try:
root = tk.Tk()
root.title("Control For Lifeview")
# Provide images
# get directory of script, in config file now:
# cfg.scriptPath = os.path.dirname(os.path.abspath(__file__))
pathPlayImg = cfg.scriptPath + r"\images\buttonplay-3-32x36.png"
pathPauseImg = cfg.scriptPath + r"\images\buttonpause-3-32x36.png"
pathNextImg = cfg.scriptPath + r"\images\buttonnext-3-32x36.png"
pathPrevImg = cfg.scriptPath + r"\images\buttonprev-3-32x36.png"
playImg = tk.PhotoImage(file=pathPlayImg)
pauseImg = tk.PhotoImage(file=pathPauseImg)
nextImg = tk.PhotoImage(file=pathNextImg)
prevImg = tk.PhotoImage(file=pathPrevImg)
idx=0
l=0
def resumeIt():
nextBtn.config(state=tk.DISABLED)
prevBtn.config(state=tk.DISABLED)
pauseBtn.config(state=tk.NORMAL)
resumeBtn.config(state=tk.DISABLED)
try:
os.remove(cfg.pathControlFile)
except:
pass
def pauseIt():
global idx, l, files
with open(cfg.pathControlFile, "w") as f:
f.write('paused')
files=glob.glob(cfg.lifeviewPath+r'\*.ORF')
l=len(files)
if l > 0:
idx=l-1
startArray = [
cfg.irfanViewPath,
files[idx]
]
subprocess.Popen(startArray)
nextBtn.config(state=tk.NORMAL)
prevBtn.config(state=tk.NORMAL)
pauseBtn.config(state=tk.DISABLED)
resumeBtn.config(state=tk.NORMAL)
print(files)
def openNext():
global idx,l,files
if idx < l-1:
prevBtn.config(state=tk.NORMAL)
idx=idx+1
startArray = [
cfg.irfanViewPath,
files[idx]
]
subprocess.Popen(startArray)
if idx == l-1:
nextBtn.config(state=tk.DISABLED)
def openPrev():
global idx, l, files
if idx > 0:
nextBtn.config(state=tk.NORMAL)
idx=idx-1
if idx==0:
prevBtn.config(state=tk.DISABLED)
startArray = [
cfg.irfanViewPath,
files[idx]
]
subprocess.Popen(startArray)
resumeBtn = tk.Button(
root,
bd=0,
image=playImg,
command=partial(resumeIt),
state=tk.DISABLED
)
pauseBtn = tk.Button(
root,
bd=0,
image=pauseImg,
command=partial(pauseIt),
)
nextBtn = tk.Button(
root,
bd=0,
image=nextImg,
command=partial(openNext),
state=tk.DISABLED
)
prevBtn = tk.Button(
root,
bd=0,
image=prevImg,
command=partial(openPrev),
state=tk.DISABLED
)
lblStopResume = tk.Label(root, text="Stop/Resume Liveview", justify=tk.LEFT)
lblPrevNext = tk.Label(root, text="Previous/Next Image", justify=tk.LEFT)
pauseBtn.grid(row=0, column=0, padx=5, pady=5, sticky=tk.NW)
resumeBtn.grid(row=0, column=1, padx=5, pady=5, sticky=tk.NW)
prevBtn.grid(row=1, column=0, padx=5, pady=5, sticky=tk.NW)
nextBtn.grid(row=1, column=1, padx=5, pady=5, sticky=tk.NW)
lblStopResume.grid(row=0, column=2, padx=5, pady=5, sticky=tk.W)
lblPrevNext.grid(row=1, column=2, padx=5, pady=5, sticky=tk.W)
# sunValleyPath = cfg.scriptPath + r"\Sunvalley\sun-valley.tcl"
# root.tk.call("source", sunValleyPath)
# s = ttk.Style()
# print(s.theme_names())
# ttk.Style(root).theme_use("sun-valley-light")
except:
print("Error", sys.exc_info()[2].tb_lineno, sys.exc_info())
input()
Code: Alles auswählen
import os
# Some variables common for main and control script:
irfanViewPath = r"C:\Program Files\Grafik\Irfanview\i_view64.exe"
lifeviewPath = r"D:\Gemeinsame Dateien\Astronomie\Lifeview"
scriptPath = os.path.dirname(os.path.abspath(__file__))
pathControlFile = scriptPath + r"\paused.txt"
Beste Grüße, Ulrich