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()
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.
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.
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.
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))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With