Button führt command direkt aus

Fragen zu Tkinter.
Antworten
Benutzeravatar
StefanLawl
User
Beiträge: 92
Registriert: Donnerstag 7. Juni 2012, 20:23

Hallo, ich habe das Problem, dass ich einen Button habe, der (logischerweise) einen command ausführen soll, in meinem Fall command=self.ngag_page(page). Allerdings wird dieser Befehl direkt ausgeführt, sobald ich das Programm starte, ohne dass ich den Button drücke und der Button funktioniert nicht mehr (wenn ich ihn klicke, passiert nicht).

Ich weiß nicht, ob command=self.ngag_page(page) richtig ausgedrückt ist, anders wüsste ich allerdings nicht, wie ich 'hot' als page benutze, sobald man den Button drückt, da ich selbiges auch mit 'trending' und 'vote' machen möchte.

Code: Alles auswählen

import os, time
from Tkinter import Tk, Label, Toplevel, Frame, Button

root=Tk()
class App():
    def __init__(self, master):
        self.bgcolor="#5ca1f7"

        self.ngag_toplevel = Toplevel(bg=self.bgcolor)
        self.ngag_toplevel.geometry('640x360')
        self.ngag_toplevel.title('9gag Downloader')
        self.ngag_toplevel.focus_force()
        self.ngag_toplevel.resizable(False, False)
        self.ngag_toplevel.wm_attributes("-topmost", True)
        self.ngag_toplevel.attributes("-alpha", 0.95)

        self.ngag_frame = Frame(self.ngag_toplevel, bg=self.bgcolor)
        self.ngag_frame.pack(fill='both', expand=True)

        self.ngag_button_hot = Button(self.ngag_frame, text='Hot', width=8, command=self.ngag_page('hot'))
        self.ngag_button_hot.pack(side='top', anchor='w', padx=15, pady=10)

        self.ngag_button_trend = Button(self.ngag_frame, text='Trending', width=8)
        self.ngag_button_trend.pack(side='top', anchor='w', padx=15, pady=0)

        self.ngag_button_vote = Button(self.ngag_frame, text='Vote', width=8)
        self.ngag_button_vote.pack(side='top', anchor='w', padx=15, pady=10)

    def ngag_page(self, page):
        zeit=time.localtime()
        jahr, monat, tag, stunde, minute = zeit[0:5]
        self.folder= "%s-%s-%s-%s-%s" % (tag, monat, jahr, stunde, minute)
        url='http://9gag.com/%s' % page
        name = '%s'+str(time.time())
        os.makedirs('9gag\\%s_%s' % (page[0], self.folder))

App(root)
root.mainloop()
(Ignoriert, dass ich ein extra Toplevel erstelle, ich möchte das Programm in einem anderen verwenden, das bereits ein Fenster besitzt. Das leere Tk() ersetzt dieses.)

Stefan

Vielen Dank für Antworten (und Entschuldigung für die vielen Fragen, die ich ständig stelle :/ Ich versuche wirklich, nur Fragen zu stellen, wenn ich selbst nach Tagen nicht herausfinde, was das Problem ist.)
Zuletzt geändert von StefanLawl am Freitag 2. November 2012, 16:18, insgesamt 1-mal geändert.
Man sagt uns wir sollen der Idee gedenken und nicht des Mannes. Denn ein Mensch kann versagen. Er kann gefangen werden. Er kann getötet und vergessen werden. Aber 400 Jahre später kann eine Idee immer noch die Welt verändern.
-V
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Statt tagelang zu suchen, versuchs doch mal hiermit:
http://www.python-forum.de/viewtopic.ph ... 59#p226259

SCNR
:wink:
yipyip
Benutzeravatar
StefanLawl
User
Beiträge: 92
Registriert: Donnerstag 7. Juni 2012, 20:23

Vielen Dank yipyip, ich werde es mit lambda versuchen! :mrgreen:

Stefan

Es funktioniert bestens, danke vielmals!
Man sagt uns wir sollen der Idee gedenken und nicht des Mannes. Denn ein Mensch kann versagen. Er kann gefangen werden. Er kann getötet und vergessen werden. Aber 400 Jahre später kann eine Idee immer noch die Welt verändern.
-V
Antworten