Seite 1 von 1

2 Windows und aktivieren von Befehlen im 2. Fesnter

Verfasst: Freitag 18. Juni 2021, 12:57
von Mood
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()

Re: 2 Windows und aktivieren von Befehlen im 2. Fesnter

Verfasst: Freitag 18. Juni 2021, 13:54
von __deets__
Man darf immer nur *ein* Tk-Objekt haben. Ein weiteres Fenster erstellst du mit Toplevel.

Re: 2 Windows und aktivieren von Befehlen im 2. Fesnter

Verfasst: Freitag 18. Juni 2021, 21:32
von Mood
Achso, vielen Dank für deine Hilfe :)

Re: 2 Windows und aktivieren von Befehlen im 2. Fesnter

Verfasst: Samstag 19. Juni 2021, 19:20
von Sirius3
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.

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()