ich habe mal wieder Lust auf ein Python-Projekt bekommen und fand irgendwie die Idee des eigenen Sprachassistenten ganz reizend. Nun habe ich schon einmal die Spracherkennung hinbekommen und das funktioniert auch so weit, aber als ich per Sprachbefehl ein Tkinter-Fenster öffnen und wieder schließen wollte, kamen unerwartet eine Menge Probleme auf: sobald das Fenster offen ist, verhindert der mainloop(), dass die Spracherkennung weiterhin meine Stimme erkennen konnte. Ich habe mir daher überlegt, Tkinter in einen anderen Thread auszulagern und siehe da, zur Hälfte klappts! Das öffnen per Sprachbefehl und das Textfeld im Tkinter-Fenster lassen sich benutzen, allerdings hängt sich der ganze Spaß beim schließen einfach auf. Das Tkinter-Fenster geht noch zu, aber der Main-Thread wird dabei in Mitleidenschaft gezogen. Oder nicht? Es scheint zumindest bei
Code: Alles auswählen
self.root.destroy()
. Kann mir da irgendwer weiterhelfen? Wie beende ich so einen Thread richtig (habe schon eine Menge Möglichkeiten aus dem Internet gesehen, aber keine hat funktioniert)? Und wie schließe ich mein Tkinter-Fenster, ohne dabei meine Sprachsteuerung zu zerschießen? Ich bin für jede Hilfe dankbarAttributeError: 'function' object has no attribute 'set'
--- CLI.py ---
Code: Alles auswählen
from tkinter import *
import threading, ctypes
class CLI(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
print("Cli sollt erzeugt worden sein")
#self.start()
def stop(self):
#self.root.destroy()
self._stop.set()
def stopped(self):
return self._stop.isSet()
def run(self):
self.root=Tk()
self.root.wm_title("C//_>")
self.root.iconbitmap('Images/commandPromptImage.ico')
green,black,blue='#39ff14','#000000','#0099ff'
foreground_color=blue
text_area = Text(self.root)
text_area.grid(row=0, column=0, columnspan=4, sticky=N+S+W+E)
text_area.configure(background=black,foreground=foreground_color)
self.root.grid_columnconfigure(0, weight=1)
self.root.grid_rowconfigure(0, weight=1)
self.root.mainloop()
Code: Alles auswählen
from tkinter import *
import threading, ctypes
class CLI(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
print("Cli sollt erzeugt worden sein")
#self.start()
def stop(self):
#self.root.destroy()
self._stop.set()
def stopped(self):
return self._stop.isSet()
def run(self):
self.root=Tk()
self.root.wm_title("C//_>")
self.root.iconbitmap('Images/commandPromptImage.ico')
green,black,blue='#39ff14','#000000','#0099ff'
foreground_color=blue
text_area = Text(self.root)
text_area.grid(row=0, column=0, columnspan=4, sticky=N+S+W+E)
text_area.configure(background=black,foreground=foreground_color)
self.root.grid_columnconfigure(0, weight=1)
self.root.grid_rowconfigure(0, weight=1)
self.root.mainloop()
Code: Alles auswählen
from tkinter import *
import threading, ctypes
class CLI(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
print("Cli sollt erzeugt worden sein")
#self.start()
def stop(self):
#self.root.destroy()
self._stop.set()
def stopped(self):
return self._stop.isSet()
def run(self):
self.root=Tk()
self.root.wm_title("C//_>")
self.root.iconbitmap('Images/commandPromptImage.ico')
green,black,blue='#39ff14','#000000','#0099ff'
foreground_color=blue
text_area = Text(self.root)
text_area.grid(row=0, column=0, columnspan=4, sticky=N+S+W+E)
text_area.configure(background=black,foreground=foreground_color)
self.root.grid_columnconfigure(0, weight=1)
self.root.grid_rowconfigure(0, weight=1)
self.root.mainloop()
Falls ich irgendetwas nicht gut genug beschrieben habe, ich versuchs auch gerne nochmal und damit ihr die ganzen Pakete, Sprachmodelle etc. beim eventuellen ausprobieren nicht herunterladen müsst, mach ich das auch gerne. Vielen vielen Dank im Voraus,
Fussel 132