Seite 1 von 1
					
				String und Integer verbinden ?
				Verfasst: Donnerstag 9. Juli 2015, 19:54
				von Wolflkoder
				Hallo, 
ich würde gerne einige Tkinter-Buttons ausblenden, und würde dies gerne mit einer for-schleife realisieren
Code: Alles auswählen
def ausblenden():
        print ("ausblenden")       
        wert = 9
        for i in range (41):
                wert = wert+1
                print ('button%d'%(wert))               
                ('button%d'%(wert)).place_forget()
die vorletzte Zeile print... gibt mir alles richtig aus!
Allerdings hab ich hier ein Problem in der letzten Zeile meines Codes. 
Ziel wäre:
 button10.place_foget()
.
.
.
.
button50.place_forget()
wäre dankbar für einen Lösungsansatz
 
			 
			
					
				Re: String und Integer verbinden ?
				Verfasst: Donnerstag 9. Juli 2015, 20:02
				von Sirius3
				@Wolflkoder: Variablennamen durchzunummerieren macht man nicht. Statt dessen benutzt man Listen:
Code: Alles auswählen
def ausblenden(buttons):
    for button in buttons:
        button.place_forget()
 
			 
			
					
				Re: String und Integer verbinden ?
				Verfasst: Donnerstag 9. Juli 2015, 21:01
				von Wolflkoder
				Hallo Sirius3
ich habe nun eine Liste erstellt:
buttons =  ["button1","button2","butt.............."]
und die for-schleife angepasst.
Allerdings erhalte ich nun folgende Fehlermeldung:
missing 1 required positional argument
			 
			
					
				Re: String und Integer verbinden ?
				Verfasst: Donnerstag 9. Juli 2015, 21:36
				von Wolflkoder
				wenn ich die Liste inerhalb der Funktion erstelle habe ich folgende Meldung:
AttributeError: 'str' object has no attribute 'place_forget'
			 
			
					
				Re: String und Integer verbinden ?
				Verfasst: Donnerstag 9. Juli 2015, 22:10
				von DasIch
				Du sollst nicht eine Liste von Strings erzeugen, sondern die Tkinter Buttons in eine Liste packen.
			 
			
					
				Re: String und Integer verbinden ?
				Verfasst: Donnerstag 9. Juli 2015, 22:38
				von Wolflkoder
				Ich verstehe nicht wie ich die Liste machen soll, da ja jeder Button einen eigenen "text" und ein eigenes "command" hat ?
			 
			
					
				Re: String und Integer verbinden ?
				Verfasst: Donnerstag 9. Juli 2015, 22:51
				von Sirius3
				@Wolflkoder: wenn Du eine Liste mit Strings erzeugen kannst, dann kannst Du das auch mit Buttons.
			 
			
					
				Re: String und Integer verbinden ?
				Verfasst: Donnerstag 9. Juli 2015, 22:55
				von snafu
				Wolflkoder hat geschrieben:Ich verstehe nicht wie ich die Liste machen soll, da ja jeder Button einen eigenen "text" und ein eigenes "command" hat ?
Das "weiß" das Button-Objekt ja von sich aus, nachdem du es erstellt hast. Erstelle halt eine Liste von Button-Objekten, so wie du die Button-Objekte ursprünglich (vermutlich) an die Bezeichner "button1", "button2", usw binden wolltest.
 
			 
			
					
				Re: String und Integer verbinden ?
				Verfasst: Freitag 10. Juli 2015, 07:51
				von bwbg
				Hier einmal das Rundumsorglospaket, welches hoffentlich Deine Fragen beantworten könnte. Es zeigt, wie man Buttons aus einer Liste (mit Tupeln) erzeugt, in einer Liste speichert und diese Liste zum Ein- und Ausblenden der Buttons verwendet.
Code: Alles auswählen
#!/usr/bin/env python3
import tkinter as tk
class MainFrame(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.buttons = []
        self.hide = None # tk.Button
        self.show = None # tk.Button
        self._init_widgets()
    def _init_widgets(self):
        for name, function in [('First Button', first),
                               ('Second Button', second),
                               ('Third Button', third)]:
            button = tk.Button(self, text=name, command=function)
            button.pack(side=tk.TOP, fill=tk.X)
            self.buttons.append(button)
        self.hide = tk.Button(self, text='Hide Buttons',
                              command=self.hide_buttons,
                              bg='#ff8080')
        self.hide.pack(side=tk.BOTTOM, fill=tk.X)
        
        self.show = tk.Button(self, text='Show Buttons',
                              command=self.show_buttons,
                              bg='#80ff80',
                              state=tk.DISABLED)
        self.show.pack(side=tk.BOTTOM, fill=tk.X)
    def show_buttons(self):
        for button in self.buttons:
            button.pack(side=tk.TOP, fill=tk.X)
        self.show.configure(state=tk.DISABLED)
        self.hide.configure(state=tk.NORMAL)
    def hide_buttons(self):
        for button in self.buttons:
            button.pack_forget()
        self.show.configure(state=tk.NORMAL)
        self.hide.configure(state=tk.DISABLED)
# Exemplary functions to be bound to the buttons
def first():
    print('First button pressed')
    
def second():
    print('Second button pressed')
    
def third():
    print('Third button pressed')
# Main Idiom
def main():
    """Program's entry-point."""
    root = tk.Tk()
    frame = MainFrame(root)
    frame.pack(fill=tk.BOTH)
    root.mainloop()
if __name__ == '__main__':
    main()
Aus Deinem Codeschnippsel folgere ich, dass Du mit Klassen und Objektorientierung noch nicht viel am Hut hattest. Diese Kenntnisse eignete ich mir an Deiner Stelle schnell an. Ansonsten würde es schnell unübersichtlich.
 
			 
			
					
				Re: String und Integer verbinden ?
				Verfasst: Freitag 10. Juli 2015, 08:35
				von Wolflkoder
				Hallo bwbg,
richtig ich habe mit OoP noch nicht viel mit am Hut!
Aktuell erstelle ich meine Buttons  mit   "button1 = Button(main,width=15, height = 2, text="Info",bd=1,command=info)"
Da ich mehrere Buttons benötige hat das keinen Sinn so weiter zu machen.
Ich werde mich nun intensiv mit Objektorientiertem programmieren beschäftigen.
Mit deinem Code Beispiel habe ich jetzt wirklich alles was ich benötige, etzt gehts ans verstehen 
Viele Dank an alle für die Hilfestellungen!