tk.StringVar.get() Erhalte ein leeren String

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
yildirim2665
User
Beiträge: 14
Registriert: Freitag 27. Januar 2023, 10:43

hi,

versuche ein Python-Programm (MVC-Pattern) zu bauen, bin Anfänger und habe Probleme in der View.
Folgendes :
siehe Code: def adHum(self) # stringVar.get()'s sind leer warum??
def delHum(self) # das gleiche Problem

Kann mir jemand weiter helfen???

Code: Alles auswählen

from tkinter import *
import tkinter as tk
import tkinter.messagebox
import tkinter.ttk as ttk

class View(ttk.Frame):
    def __init__(self,parent):
        super().__init__(parent)

        self.mainLab = ttk.Label(self,text='HumList')
        self.grid(row=1,column=1)

        self.butNewHum = ttk.Button(self,text='NewHum',command=self.insertHum)
        self.butDelHum = ttk.Button(self,text='DelHum',command=self.rootDelHum)

        self.butNewHum.grid(row=1,column=1)
        self.butDelHum.grid(row=2,column=2)
    

  
        self.namVar = tk.StringVar()
        self.altVar = tk.StringVar()
        self.delNam = tk.StringVar()
        
    def insertHum(self):
        self.root2 = Tk()

        namLab = ttk.Label(self.root2,text='Name')
        entNam = ttk.Entry(self.root2,textvariable=self.namVar)
        namLab.grid(row=1,column=1)
        entNam.grid(row=1,column=2)

        altLab = ttk.Label(self.root2,text='Alter')
        entNam = ttk.Entry(self.root2,textvariable=self.altVar)
        altLab.grid(row=2,column=1)
        entNam.grid(row=2,column=2)

        okBut = ttk.Button(self.root2,text='Einfügen',command=self.adHum)
        okBut.grid(row=3,column=1)

        abbBut = ttk.Button(self.root2,text='Abbruch',command=self.closeRoot2)
        abbBut.grid(row=3,column=2)

    def closeRoot2(self):
        #self.namVar.set('')
        #self.altVar.set('')
        self.root2.destroy()
        self.root2.quit()

    def adHum(self):
        
        if self.controller:
            self.controller.newHum(self.namVar.get(),self.altVar.get())     # get()'s sind leer!! Warum

    
    def rootDelHum(self):
        self.root3=Tk()
        nL = ttk.Label(self.root3,text='Name')
        nL.grid(row=1,column=1)
        ent = ttk.Entry(self.root3,textvariable=self.delNam)
        ent.grid(row=1,column=2)
        but = ttk.Button(self.root3,text='Löschen',command=self.delHum)
        but.grid(row=2,column=1)
        abb = ttk.Button(self.root3,text='Abbruch',command=self.closeRoot3)
        abb.grid(row=2,column=2)

    def delHum(self):
        print('löscht'+self.delNam.get()) # gibt nur 'löscht' zurück

        if self.controller:
            self.controller.delHum(self.delNam.get())
            self.closeRoot3()
        
    def closeRoot3(self):
        
        self.root3.destroy()
        self.root3.quit()
        
    def setController(self,controller):
        self.controller = controller
        
    def shAdHum(self,name):
        tkinter.messagebox.showinfo('EinfügenInfo',f'Person {name} wurde hinzugefügt') # messageBox
        self.closeRoot2()
        
    def shDelHum(self,name):
        
        tkinter.messagebox.showinfo('LöschenInfo',name) #

        
    def shHumList(self,humList):
        for i, hum in enumerate(humList):
            print(f'{i+1}. {hum}') # window 

    def emptyHL(self):
        print('Liste leer!!!-Kein Personenen eingetragen-') #
        tkinter.messagebox.showinfo('LeereListe','Kein Personenen eingetragen') #


        
    def shHum(self,name,humList):
        filterHum = [hum for hum in humList if hum['name']==name]
        if filterHum != []:
            for i, hum in enumerate(filterHum):
               print(f'{filterHum[i]}')
            
        else:
                self.noHum(name)
                
    def noHum(self,name):
        print(f'Person {name} nicht in der Liste vorhanden #FromSelf')
        tkinter.messagebox.showinfo('KeinePerson',f'Person {name} nicht in der Liste vorhanden')#
    
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du darfst nur ein Tk-Objekt haben. Wenn du Fenster machen willst, brauchst du TopLevel.
yildirim2665
User
Beiträge: 14
Registriert: Freitag 27. Januar 2023, 10:43

vielen dank für die schnell Antwort....Problem gelöst!!!
Antworten