Hallo zusammen,
# ich bin neu in Tkinter und ich versuche einen einfachen Taschenrechner zu programmieren.
# damit ich mir die Aufgabe komplizierter mache, möchte ich dass der User erstmal in einem Fenster einloggt und wenn alles richtig ist öffnet ein zweites Fenster mit dem #Taschenrechner, wo der User auf die Buttons drückt und die gedrückte Nummer wird auf das Entry angezeigt. Mein Problem ist, wenn ich im zweiten Fenster auf ein Button #drücke, wird die Nummer von dem gedrückten Button nicht auf dem Entery angezeigt, obwohl ich das laut meines Wissens implementiert habe.
# Ich wäre euch dankbar, wenn ihr mir weiterhelfen, und Tipps sagen könnt
# LG!
# Hier ist mein Code:
from tkinter import *
window = Tk()
window.title('Log in')
window.geometry('400x200')
window.resizable(0,0)
window2 = Tk()
window2.state('withdrawn')
vartotal=StringVar()
def login():
calculator_window()
def zero():
vartotal.set('0')
def calculator_window():
window2 = Tk()
window.state('withdrawn')
window2.title('Calculator')
window2.geometry('400x400')
window2.resizable(0, 0)
window2.configure(bg='navajowhite')
nr_zero = Button(window2, text='0', fg='seagreen', font='arial,9', command=zero)
nr_zero.place(x=195, y=175, width=40)
total = Entry(window2, justify='center', textvariable=vartotal)
total.place(x=60, y=12)
bt_Login=Button(window,text='Log in', command=login, bd=6,relief='raised')
bt_Login.place(x=175,y=120)
window.mainloop()
2 Windows und aktivieren von Befehlen im 2. Fesnter
Das machst drei Fenster! Dabei darf es nur ein Tk-Objekt geben, weitere Fenster muß man als Toplevel erzeugen.
*-Importe sollte man nicht verwenden, weil nicht nachvollziehbar ist, wo welcher Name herkommt.
Man benutzt keine globalen Variablen, und alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. In der Konsequenz braucht jedes nicht-triviale GUI-Programm Klassendefinitionen.
place benutzt man nicht, weil damit das Fenster bei unterschiedlichen Auflösungen unbenutzbar werden kann.
*-Importe sollte man nicht verwenden, weil nicht nachvollziehbar ist, wo welcher Name herkommt.
Man benutzt keine globalen Variablen, und alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. In der Konsequenz braucht jedes nicht-triviale GUI-Programm Klassendefinitionen.
place benutzt man nicht, weil damit das Fenster bei unterschiedlichen Auflösungen unbenutzbar werden kann.
Code: Alles auswählen
import tkinter as tk
from functools import partial
def zero(vartotal):
vartotal.set('0')
def calculator_window(window):
window.state('withdrawn')
vartotal = tk.StringVar(window)
window2 = tk.Toplevel(window)
window2.title('Calculator')
window2.resizable(0, 0)
window2.configure(bg='navajowhite')
tk.Entry(window2, justify='center', textvariable=vartotal).pack()
tk.Button(window2, text='0', fg='seagreen', font='arial,9', command=partial(zero, vartotal)).pack()
window2.protocol("WM_DELETE_WINDOW", window.destroy)
def main():
window = tk.Tk()
window.title('Log in')
window.resizable(0,0)
tk.Button(window, text='Log in', command=partial(calculator_window, window), bd=6,relief='raised').pack(padx=20,pady=20)
window.mainloop()
if __name__ == "__main__":
main()