Abend Forum
Ich poste das nun nochmal hier herein, weil es eventuell doch mit after zu tun hat:
Gegeben ist eine class App mit einem Knopf (Der heißt Verschlüsseln)
Außerdem eine Tk-Fensterloop.
Drückt man auf den Knopf, soll nicht die Verschlüsselungsroutine anlaufen, sondern nur ein Info-Fenster erscheinen (Funktion: write_precoding)
Gleichzeitig wird eine Variable (codeprocess) auf "yes" gestellt. Danach sollte das Programm wieder in den Mainloop eintreten.
In der Mainloop wird geschaut, ob die Variable codeprocess auf "yes" steht. Wenn ja soll die Funktion : write_coding ausgeführt werden.
Am Ende von write_coding muss das Label von write_precoding wieder weg, und die Variable precoding wieder auf "no" gesetzt werden.
Soweit bin ich bis jetzt gekommen:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from tkinter import *
codeprocess = "no"
# Einleitung der App-Knoepfe / Hier gibt es jetzt nur einen zum Test
class App:
def __init__(self, master):
frame = Frame(master)
frame.place(width=120, height=320, x=340, y=170)
# Pre-Code-Button
self.precoding = Button(frame,
text="Verschlüsseln ►", fg="red", pady=5, padx=5,
command=self.write_precoding)
self.precoding.pack()
####################
# Codierungs-Block #
####################
def write_precoding(self):
# Prozess-Meldung
fourLabel = Label(root, text="Bitte warten...", font=("TimesNewRoman", 20), borderwidth=2, relief=("groove"), background=("#ff5a5a"), width=36, anchor=("center"))
fourLabel.place(x=150,y=165)
codeprocess = "yes"
print("precoding Ansprung hat geklappt...")
root.after(1000, write_coding)
def write_coding(self):
print("Beginn des Codierungsblock")
####################
# Mainloop - Block #
####################
# Fenster-Titel
root = Tk(className=" Fenstername Blablabla")
root.resizable(FALSE,FALSE)
root.attributes("-topmost", 1)
root.wm_attributes('-type', 'splash')
# Knoepfe-App-Ende
app = App(root)
def center_window(width=300, height=200):
# get screen width and height
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
# calculate position x and y coordinates
x = (screen_width/2) - (width/2)
y = (screen_height/2) - (height/2)
root.geometry('%dx%d+%d+%d' % (width, height, x, y))
center_window(800, 480)
if codeprocess == "yes":
codeprocess = "no"
print("if-Block mainloop erreicht")
root.mainloop()
Das Testprogramm läuft bis Zeile 32. Aber es will die Funktion bzw. Sprungmarke "def write_coding(self):" nicht akzeptieren und behauptet die Funktion wäre nicht definiert - was sie aber doch ist? Oder ich bin blind...
Im Grunde brauche ich zwei Funktionen hintereinander, die aber nur durch
einen Button-Klick stattfinden sollen. Zu allem Übel soll nach der ersten Anzeigefunktion noch mal kurz der mainloop konsultiert werden, bevor es mit der zweiten Funktion weiter geht...
Ich hol mir jetzt einen Kaffee... mein Schädel ist am Qualmen...
Gruss jts