Dynamisches Eingabefenster

Fragen zu Tkinter.
DanielFackler
User
Beiträge: 5
Registriert: Montag 13. November 2017, 10:41

Dynamisches Eingabefenster

Beitragvon DanielFackler » Montag 13. November 2017, 10:55

Hallo Python-Gemeinde,

ich beschäftige mich leider erst seit kurzem mit der mächtigen Programmiersprache Python, bin daher noch ein Python-Anfänger.

Ich habe folgendes Problem:

Ich muss ein Eingabefenster kreieren, dass seine Eingabefelder und Labels je nach Auswahl des vorliegenden Falls ändert. Sprich: Wenn ich den Wert des Dropdown-Button ändere, soll sich die Anzahl der Eingabefelder und der Text der Labels ändern.

Momentan komme ich einfach nicht weiter. Das Programm ändert zwar die Anzahl der Labels, Entrys und Radiobuttons, jedoch plaziert das Programm diese willkürlich. Ich gebe ihm zwar eigentlich über .grid die Position, jedoch führt es dies nicht aus. Da die Labels ebenfalls dynamisch erzeugt werden, will ich den Text, der in den Labels steht, über eine Liste (evtl. bessere Lösung?) eingeben können.
Der Inhalt der Entrys soll noch ein ein Textfile geschrieben werden.

Ich hoffe Ihr könnt mir weiterhelfen und bedanke mich bereits im vorraus.
Anbei noch mein bisheriger Code.

  1. import tkinter as tk
  2. from tkinter import *
  3.  
  4. def open_window():
  5.     X = fenster()                      
  6.  
  7.     Eingabemaske(X)
  8.     X.mainloop()
  9.    
  10.    
  11. #Fenster kreiren
  12. def fenster():
  13.  
  14.     X = tk.Tk()                                                                          
  15.     X.wm_title('test')  
  16.     X.wm_geometry('600x600')
  17.     return X
  18.        
  19. #Fenster je nach Auswahl verändern (Eingabefelder löschen und hinzufügen)    
  20.  
  21. def Eingabemaske(X):
  22.    
  23.     def onChange(val):
  24.         if val == "test1":
  25.             numb_ent = 4
  26.             numb_lab = 4
  27.             numb_radio = 2
  28.             l_text = ['Label1', 'Label2']
  29.             rb_text = ['option1', 'option2']
  30.            
  31.         elif val == "test2":
  32.             numb_ent = 3
  33.             numb_lab = 3
  34.             numb_radio = 0
  35.             l_text = ['Label3', 'Label4']
  36.            
  37.         else:
  38.             numb_ent = 2
  39.             numb_lab = 2
  40.             numb_radio = 0
  41.             l_text = ['Label5', 'Label6']
  42.            
  43.  
  44.         #Zerstört alle Steuerelemente in den Containern
  45.         for wid in container1.winfo_children():
  46.             wid.destroy() # Using destory instead of grid_forget
  47.        
  48.         for label in container2.winfo_children():
  49.             label.destroy()
  50.            
  51.         for Radiobutton in container3.winfo_children():
  52.             Radiobutton.destroy()
  53.            
  54.         #Erstellt dynamisch die Steuerelemente im Container Frame
  55.         #Anzahl entspricht den Variablen oben
  56.         for u in range(numb_lab):
  57.    
  58.             l = tk.Label(container2, text=l_text)
  59.             l.grid(row=1 + u, column = 2)
  60.        
  61.         for v in range(numb_ent):
  62.             e = tk.Entry(container1)
  63.             e.grid(row=1 + v, column = 2)
  64.    
  65.         for w in range(numb_radio):
  66.             var1 = IntVar(X)
  67.             var1.set(2)
  68.             rb = tk.Radiobutton(container3, text=rb_text, variable=var1, value=1)
  69.             rb.grid(row=1 + w, column = 2)
  70.  
  71.     options = ["test1", "test2", "test3"]
  72.     var = tk.StringVar()
  73.     var.set("test1")
  74.  
  75.     op_menu = tk.OptionMenu(X, var, *options, command = onChange)
  76.     op_menu.grid(row = 0, column = 0)
  77.  
  78.     # Container Frame für die Steuerelemente
  79.    
  80.     container1 = tk.Frame(X)
  81.     container2 = tk.Frame(X)
  82.     container3 = tk.Frame(X)
  83.     container1.grid()
  84.     container2.grid()
  85.     container3.grid()
  86.  
  87.    
  88. open_window()

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder