Команда кнопки Tkinter активируется при запуске программы?

Я пытаюсь создать форму поиска и, похоже, проблемы с кнопками … Я новичок в программировании GUI Python / tkinter (и вообще программирование графического интерфейса) и заимствовал скелет приложения Hello World, и сота построила это.

В приведенном ниже коде я установил параметр «command» моей кнопки «Обзор», чтобы вызвать внутреннюю функцию get_dir () моего класса, когда он щелкнут. Однако, как только я пытаюсь запустить приложение, вызывается функция get_dir (), и мне предлагается выбрать каталог. Любые идеи, почему это происходит, и что я могу сделать, чтобы заставить его вести себя правильно?

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() 

3 Solutions collect form web for “Команда кнопки Tkinter активируется при запуске программы?”

Сделайте обработчик событий функцией лямбда , которая вызывает ваш get_dir() с любыми аргументами, которые вы хотите:

 xbBrowse = Button(frameN, text="Browse...", font=fontReg, command=lambda : self.get_dir(xbPath)) 

В приведенном выше коде:

 xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir(xbPath)) 

Вы вызываете функцию уже, вы должны просто передать функцию:

 xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir) 

Вам необходимо передать ссылку на ваш метод get_dir

поэтому измените

 xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir(xbPath)) 

в

 xbBrowse = Button(frameN,text="Browse...",font=fontReg, command=self.get_dir) 

Затем сделайте виджет Entry переменной экземпляра так, чтобы вы могли получить к нему доступ в методе get_dir .

например

 self.xbPath = Entry(frameN,width=30,font=fontReg) 

Тогда ваш get_dir() будет выглядеть так:

 def get_dir(self): tmp = askdirectory(mustexist=1,title="Please select a destination") tmp = tmp.replace("/","\\") self.xbPath.delete(0,END) self.xbPath.insert(0,tmp) 
  • простая анимация с использованием tkinter
  • Каковы ограничения функций обратного вызова, связанных с трассировками Tkinter?
  • Удалите окно Tkinter в Python
  • Динамически создавать кнопки Tkinter
  • Python tkinter - как удалить все дочерние элементы?
  • Как обновить виджеты в Tkinter?
  • Проблема с 'StringVar' в программе Python
  • Динамическое изменение размера и добавление виджетов в окно Tkinter
  • Python - лучший язык программирования в мире.