Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tkinter button command activates upon running program?

I'm trying to make a build retrieval form, and seem to have issues with the buttons... I'm a novice at Python/tkinter GUI programming (and GUI programming in general) and borrowed the skeleton of a Hello World app, and sorta built off that.

In the code below, I've set the "command" option of my Browse button to call my class's internal get_dir() function when it's clicked. However, as soon as I attempt to run the app, the get_dir() function is called and I'm prompted to choose a directory. Any ideas why this happens, and what I can do to make it behave properly?

from Tkinter import * import tkFont from tkFileDialog import askdirectory  class App:      def __init__(self, master):          fontHead = tkFont.Font(family="Arial", size=10, weight=tkFont.BOLD)         fontBold = tkFont.Font(family="Arial", size=8, weight=tkFont.BOLD)         fontReg =  tkFont.Font(family="Arial", size=8)          frameN = Frame(master)         frameN.grid(row=0,padx=5,pady=5)          frameXBH = Frame(frameN)         frameXBH.grid(row=0,columnspan=5,padx=5)          Canvas(frameXBH,borderwidth=0,relief="flat",height=1,width=20,background="#cccccc").grid(row=0)         Label(frameXBH, text="Xbox 360",font=fontBold,width=9).grid(row=0,column=1)         Canvas(frameXBH,borderwidth=0,relief="flat",height=1,width=440,background="#cccccc").grid(row=0,column=2,sticky="WE")          Label(frameN, text="Destination Path:",font=fontReg).grid(row=1,sticky="W")         xbPath = Entry(frameN,width=30,font=fontReg)         xbPath.grid(row=1,column=1,sticky="W")         xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir(xbPath))         xbBrowse.grid(row=1,column=2,sticky="W")         xbRel = Checkbutton(frameN,text="Release",font=fontReg)         xbRel.grid(row=1,column=3,sticky="W")         xbShip = Checkbutton(frameN,text="Ship",font=fontReg)         xbShip.grid(row=1,column=4,sticky="W")          Canvas(frameN,borderwidth=1,relief="groove",width=550,height=0).grid(row=2,columnspan=5,pady=10)          # SAVE AND CANCEL          btnSave = Button(frameN,text="Save",width=10)         btnSave.grid(row=3,column=3,sticky="E")          btnCancel = Button(frameN,text="Cancel",width=10)         btnCancel.grid(row=3,column=4,sticky="W")      def get_dir(self,box):         tmp = askdirectory(mustexist=1,title="Please select a destination")         tmp = tmp.replace("/","\\")         box.delete(0,END)         box.insert(0,tmp)  root = Tk() root.resizable(0,0)  app = App(root)  root.mainloop() 
like image 858
Doktor J Avatar asked Sep 13 '10 21:09

Doktor J


People also ask

How do buttons work in Tkinter?

Introduction to Tkinter button widgetTypically, you use a text or an image to display the action that will be performed when clicked. Buttons can display text in a single font. However, the text can span multiple lines. On top of that, you can make one of the characters underline to mark a keyboard shortcut.

What is invoke in Tkinter?

Build A Paint Program With TKinter and Python The invoke() method in Tcl/Tk does the same thing which returns a string in case if there are any commands given to the Button. The invoke() method can be called up after the initialization of the Button widget.

What is command in button Tkinter?

Tkinter Button command option sets the function or method to be called when the button is clicked. To set a function for execution on button click, define a Python function, and assign this function name to the command option of Button.


1 Answers

Make your event handler a lambda function, which calls your get_dir() with whatever arguments you want:

xbBrowse = Button(frameN, text="Browse...", font=fontReg, command=lambda : self.get_dir(xbPath)) 
like image 144
Kendall Avatar answered Sep 25 '22 14:09

Kendall