Entry-Feld im Unterfenster: Variablenübergabe klappt nicht

Fragen zu Tkinter.
Antworten
Pyth44
User
Beiträge: 2
Registriert: Dienstag 22. Januar 2013, 18:00

Hallo,

habe ein Problem mit einem Tk-Unterfenster und Tastatur-Eingaben, die dort stattfinden sollen.
Ich kann zwar mit ...bind(<'Key-Return'>... eine Funktion an das Entry-Feld binden, die Kopplung mit der StringVar-Variablen geht zwar im Haupt-, aber nicht im Unterfenster.

Hat einer von Euch vielleicht einen Hinweis?

Code: Alles auswählen

from tkinter import *

class myApp(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.text1 = StringVar()            # Text für Hauptfenster-Entry
        self.text1.set('my 1st text')        
        self.text2 = StringVar()            # Text für Unterfenster-Entry
        self.text2.set('my 2nd text')
        self.create_widgets()
    
    def create_widgets(self):
        self.myBtn = Button(self)       # Button
        self.myBtn['text'] = 'call second window'
        self.myBtn['command'] = self.secWin
        self.myBtn.pack()
        self.entry1 = Entry()           # Entry (main window)
        self.entry1.pack()
        self.entry1['textvariable'] = self.text1
        self.entry1.bind('<Key-Return>', self.printT1)

    def printT1(self, event):
        print('contents of text1=', self.text1.get())

    def printT2(self, event):
        print('contents of text2=', self.text2.get())
    
    def secWin(self):                   # second window
        sWin = Tk()
        sWin.geometry('+400+200')
        sWin.entry2 = Entry(master=sWin)# Entry (second window)
        sWin.entry2.pack()
        sWin.entry2['textvariable'] = self.text2
        sWin.entry2.bind('<Key-Return>', self.printT2)

firstWin = Tk()
firstWin.geometry('+200+200')
app =  myApp(master=firstWin).mainloop()
firstWin.destroy
Danke für Eure Tipps.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Pyth44

Willkommen in unserem Forum

Code: Alles auswählen

firstWin = Tk()
Solltest du nur einmal für das Hauptfenster verwenden. Für jedes weitere Unterfenster solltest du das Toplevel-Widget wie folgt einsetzen:

Code: Alles auswählen

    def secWin(self):                   # second window
        sWin = Toplevel()
Sternchen Importe möglichst vermeiden. Besser mit:

Code: Alles auswählen

import tkinter as tk
Gruß wuf :wink:
Take it easy Mates!
Pyth44
User
Beiträge: 2
Registriert: Dienstag 22. Januar 2013, 18:00

Mit 2. Window als Toplevel() klappt's mit der Variablen-Übergabe für Entry.

Danke wuf, für die rasche Antwort.
Antworten