Vor ein paar Jahren habe ich ein TK-Skript gehackt, um auf Ereignisse von der Fregatte zu warten und den Kamera-Feed für ein paar Sekunden anzuzeigen, wenn jemand an der Tür war. Es hat ohne großen Aufwand funktioniert, bis ich auf F43 (Python 3.14) aktualisiert habe. Jetzt stecke ich fest und schaue aus dem Fenster wie einer dieser Leute, die nach draußen gehen!
Ich vermute, dass das Problem irgendwo zwischen Anfragen und Threading liegt, bin mir aber nicht sicher, wie ich das weiter beheben kann. FWIW Ich versuche nicht, die Anfrage zu threaden (hier gibt es kein aiohttp oder asyncio), sondern nur einen Thread für tk und einen Thread für mqtt (dessen Rückruf der Ort ist, an dem die Anfrage stattfindet).
Dieser Verdacht wird durch die Möglichkeit geschürt, stream() von main() aus aufzurufen, und es funktioniert wie erwartet, aber ein Aufruf an einer beliebigen Stelle von einem der Rückrufe von mqtt löst dies aus
File "/opt/cameras/./cams.py", line 33, in on_connect
stream("garage", 10)
~~~~~~^^^^^^^^
File "/opt/cameras/./cams.py", line 64, in stream
render = ImageTk.PhotoImage(load)
File "/home/htpc/.local/lib/python3.14/site-packages/PIL/ImageTk.py", line 129, in __init__
self.__photo = tkinter.PhotoImage(**kw)
~~~~~~~~~~~~~~~~~~^^^^^^
File "/usr/lib64/python3.14/tkinter/__init__.py", line 4301, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.14/tkinter/__init__.py", line 4248, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_tkinter.TclError: image type "photo" does not exist
Vor ein paar Jahren habe ich ein TK-Skript gehackt, um auf Ereignisse von der Fregatte zu warten und den Kamera-Feed für ein paar Sekunden anzuzeigen, wenn jemand an der Tür war. Es hat ohne großen Aufwand funktioniert, bis ich auf F43 (Python 3.14) aktualisiert habe. Jetzt stecke ich fest und schaue aus dem Fenster wie einer dieser Leute, die nach draußen gehen! Ich vermute, dass das [url=viewtopic.php?t=26065]Problem[/url] irgendwo zwischen Anfragen und Threading liegt, bin mir aber nicht sicher, wie ich das weiter beheben kann. FWIW Ich versuche nicht, die Anfrage zu threaden (hier gibt es kein aiohttp oder asyncio), sondern nur einen Thread für tk und einen Thread für mqtt (dessen Rückruf der Ort ist, an dem die Anfrage stattfindet). Dieser Verdacht wird durch die Möglichkeit geschürt, stream() von main() aus aufzurufen, und es funktioniert wie erwartet, aber ein Aufruf an einer beliebigen Stelle von einem der Rückrufe von mqtt löst dies aus [code] File "/opt/cameras/./cams.py", line 33, in on_connect stream("garage", 10) ~~~~~~^^^^^^^^ File "/opt/cameras/./cams.py", line 64, in stream render = ImageTk.PhotoImage(load) File "/home/htpc/.local/lib/python3.14/site-packages/PIL/ImageTk.py", line 129, in __init__ self.__photo = tkinter.PhotoImage(**kw) ~~~~~~~~~~~~~~~~~~^^^^^^ File "/usr/lib64/python3.14/tkinter/__init__.py", line 4301, in __init__ Image.__init__(self, 'photo', name, cnf, master, **kw) ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.14/tkinter/__init__.py", line 4248, in __init__ self.tk.call(('image', 'create', imgtype, name,) + options) ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _tkinter.TclError: image type "photo" does not exist [/code] cams.py [code]#!/usr/bin/env python3
""" Listen for mqtt events from frigate and show them on the htpc """
import sys import json from threading import Thread from io import BytesIO from tkinter import Tk, Label #from tkinter import * from PIL import Image, ImageTk import paho.mqtt.client as mqtt import requests
if __name__ == '__main__': sys.exit(main()) [/code]
Update vom 22. Dezember RE: Antwort von Mintforge stream() durch WIN.after() ersetzt, einige Ausdrucke zum Debuggen hinzugefügt... [code]$python 3cams.py dispatch client thread start tk main loop connect callback MQTT connected Success
Vor ein paar Jahren habe ich ein TK-Skript gehackt, um auf Ereignisse von der Fregatte zu warten und den Kamera-Feed für ein paar Sekunden anzuzeigen, wenn jemand an der Tür war. Es hat ohne großen...
Vor ein paar Jahren habe ich ein TK-Skript gehackt, um auf Ereignisse von der Fregatte zu warten und den Kamera-Feed für ein paar Sekunden anzuzeigen, wenn jemand an der Tür war. Es hat ohne großen...
Ich habe einen Schüler unter MacOS (Sonoma 14.6.1), der eine Fehlermeldung erhält, wenn er versucht, ein Fenster in einer Funktion zu erstellen:
def nothing_window():
window = tkinter.Tk()...