ok. Mit for-Schleife und wait verlier ich aber dann doch meine "live"-Übertragung, oder?
Hier wird alles sofort ins Textfeld geballert.
Pyinstaller-Ausgabe komplett an ein tkinter-Textfeld schicken
- __blackjack__
- User
- Beiträge: 13110
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@DMD-OL: Das geht weder mit ``while`` noch mit ``for`` weil beides die GUI blockiert. Das wir das jetzt schon wieder als Thema haben…
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ganz nebenbei: Mich verwirrt der Grund des Programms. pyinstaller nutzt doch die spec-Datei um das Projekt zu konfigurieren. Warum dann eine Oberfläche, die nur einen Bruchteil der Oprionen fest verdrahtet als Aufrufargumente übergibt?
Hi an alle.
Ich habe da nochmal ein kleines Problem.
In meinem Code möchte ich mir vorher ein Icon auswählen, das dann in die EXE-Datei übernommen wird.
DIE GROSSEN BUCHSTABEN VERWENDE ICH ZUR EINFACHEREN LESBARKEIT.
Das funktioniert auch alles, wenn ich aber nach der while-Schleife, die erstellte EXE in den Pfad TRG_EXE kopiere, wird
nicht das richtige Icon mitgenommen. Da stimmt wohl noch was mit der while-Schleife nicht?
Woran kann das liegen?
Ich habe da nochmal ein kleines Problem.
In meinem Code möchte ich mir vorher ein Icon auswählen, das dann in die EXE-Datei übernommen wird.
DIE GROSSEN BUCHSTABEN VERWENDE ICH ZUR EINFACHEREN LESBARKEIT.
Das funktioniert auch alles, wenn ich aber nach der while-Schleife, die erstellte EXE in den Pfad TRG_EXE kopiere, wird
nicht das richtige Icon mitgenommen. Da stimmt wohl noch was mit der while-Schleife nicht?
Code: Alles auswählen
# SRC_ICN_FILE = "C:/Users/chris/Documents/PyCharm/Hot Run/images/icon/minion.ico"
SRC_ICN_FILE = "C:/Users/chris/Documents/PyCharm/Create EXE-File/images/icon.ico"
# SRC_ICN_FILE = "C:/Users/chris/Documents/PyCharm/Archiv/Tutorials/Space Invadors/images/icon/spaceship_32.ico"
TRG_FOLDER_PATH = "C:/Users/chris/Desktop/Space Invators" # Alles zur exe-Erstellung benötigte, wird hier her kopiert
TRG_BASE_NAME = "Space Invators"
TRG_ICN_FILE = "C:/Users/chris/Desktop/Space Invators/icon/icon.ico" # Hierher wird das ausgewählte Icon kopiert
process = subprocess.Popen([spawn.find_executable('pyinstaller.exe'),
'main.py',
'--onefile',
'--windowed',
'--icon=' + TRG_ICN_FILE,
'--name=' + TRG_BASE_NAME,
],
bufsize=1,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
cwd=TRG_FOLDER_PATH, # Aktueller Arbeitsbereich ist der neue erstellte Ordner
universal_newlines=True)
while process.poll() is None:
line = process.stdout.readline()
if not line:
break
self.DISPLAY.insert(tk.END, line, 'red')
self.DISPLAY.see(tk.END)
self.DISPLAY.update_idletasks()
# Bis hier funktionierts. Das ausgewählte Icon wird jeweils richtig in die .exe eingebaut.
################################################################################################################
# Ab hier wird zwar die EXE richtig erstellt und kopiert, die EXE-Datei zeigt aber ein falsches Icon an (nicht das ausgewählte).
if process.returncode is None:
print('Finished...')
TRG_EXE = os.path.join(TRG_FOLDER_PATH, 'dist', TRG_BASE_NAME + '.exe')
self.copy_additives(TRG_EXE, TRG_FOLDER_PATH)
################################################################################################################
Das hat nichts mit der while-Schleife zu tun, die wie schon mehrfach geschrieben, eh falsch ist, weil das eine for-Schleife sein sollte:
Wobei diese Art der Schleife bei GUI-Programmen nicht verwendet werden darf, weil sie die eigentliche Ereignisschleife kaputt macht. Ein update_ideltasks sollte man erst gar nicht benutzen. Unter Unix könnte man wohl tkinter.createfilehandler verwenden, unter Windows wird aber einem nichts anderes übrig bleiben als mit einem separaten Thread und einer Queue zu arbeiten.
Code: Alles auswählen
for line in process.stdout:
self.display.insert(tk.END, line, "red")