Pyinstaller-Ausgabe komplett an ein tkinter-Textfeld schicken

Fragen zu Tkinter.
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

ok. Mit for-Schleife und wait verlier ich aber dann doch meine "live"-Übertragung, oder?
Hier wird alles sofort ins Textfeld geballert.
Benutzeravatar
__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
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Die "live"-Übertragung hast Du mit Deinem bisherigen Code auch nicht, jedenfalls nicht, wenn Du nicht noch viel mehr machst, als das, was Du bisher hier verraten hast.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

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?
DMD-OL
User
Beiträge: 315
Registriert: Samstag 26. Dezember 2015, 16:21

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?

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)
    
################################################################################################################
Woran kann das liegen?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Das hat nichts mit der while-Schleife zu tun, die wie schon mehrfach geschrieben, eh falsch ist, weil das eine for-Schleife sein sollte:

Code: Alles auswählen

for line in process.stdout:
    self.display.insert(tk.END, line, "red")
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.
Antworten