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!