2016-11-24 31 views
-1

我使用Python 3.5和TKinter。 我定義了一個更新此標籤的標籤和文件對話框。 按鈕負責啓動此對話框。按鈕行爲

self.sel_folder_val = the label that will be updated. 
The code: 
self.sel_folder_val['text']=filedialog.askdirectory() 

按下按鈕以啓動此對話框後,按鈕保持按下狀態。任何按鈕負責打開的對話框都會導致按鈕保持低電平(關閉此對話框後。 我也試過這沒有幫助...:

self.select_folder_btn.config(relief=RAISED) 

代碼示例:

self.select_folder_btn = Button(self.top) 
self.select_folder_btn.place(relx=0.07, rely=0.57, height=34, width=187) 
self.select_folder_btn.configure(activebackground="#d9d9d9") 
self.select_folder_btn.configure(activeforeground="#000000") 
self.select_folder_btn.configure(background="#d9d9d9") 
self.select_folder_btn.configure(disabledforeground="#a3a3a3") 
self.select_folder_btn.configure(font=self.font3) 
self.select_folder_btn.configure(foreground="#000000") 
self.select_folder_btn.configure(highlightbackground="#d9d9d9") 
self.select_folder_btn.configure(highlightcolor="black") 
self.select_folder_btn.configure(pady="0") 
self.select_folder_btn.configure(text='''Select destination folder''') 
self.select_folder_btn.bind('<Button-1>',self.update_folder_value) 

def update_folder_value(self,event): 
    self.sel_folder_val['text']=filedialog.askdirectory() 
return 

執行update_folder_value()函數後,self.select_folder_btn停留下來。

+0

請發佈一個完整的代碼示例:http://stackoverflow.com/help/mcve – kabanus

+0

@kabanus代碼已添加。 – Orenl

+0

其中之一,不要在按鈕上使用'bind'。使用'command'選項讓tkinter擔心事件綁定。 –

回答

1

首先以供將來參考,這是一個很小的工作例如:

from Tkinter import * 
import tkFileDialog as filedialog 

class app: 
    def __init__(self): 
     self.top = Tk() 
     self.select_folder_btn = Button(self.top) 
     self.select_folder_btn.place(relx=0.07, rely=0.57, height=34, width=187) 
     self.select_folder_btn.configure(activebackground="#d9d9d9") 
     self.select_folder_btn.configure(activeforeground="#000000") 
     self.select_folder_btn.configure(background="#d9d9d9") 
     self.select_folder_btn.configure(disabledforeground="#a3a3a3") 
     #self.select_folder_btn.configure(font=self.font3) 
     self.select_folder_btn.configure(foreground="#000000") 
     self.select_folder_btn.configure(highlightbackground="#d9d9d9") 
     self.select_folder_btn.configure(highlightcolor="black") 
     self.select_folder_btn.configure(pady="0") 
     self.select_folder_btn.configure(text='''Select destination folder''') 
     self.select_folder_btn.configure(command=self.update_folder_value) 
     self.sel_folder_val = {} 
     self.top.mainloop() 

    def update_folder_value(self): 
     self.sel_folder_val['text']=filedialog.askdirectory() 
     self.top.update_idletasks() 
app() 

即使這不是最小的。其次你的問題很難找到,因爲這不是最小的 - 你正在做一些事情真的奇怪 - 綁定按鈕點擊。您正在重寫內置綁定,顯然它仍然會影響按下按鈕的狀態,但不會返回。什麼你想要的是:

self.select_folder_btn.configure(command=self.update_folder_value) 

你的,而不是:

self.select_folder_btn.bind('<Button-1>',self.update_folder_value) 

你也可以定義在Button命令。你所做的是繞過按鈕機制,所以顯然只有一半被執行,並且浮雕不會被擡起。請注意,您必須刪除您的方法接受的事件參數。

+0

我想你的例子會更好一點,如果你刪除了'lambda'的使用。 lambda常常被使用,並且會讓很多初學者感到困惑。 –

+0

糟糕,把它放在這裏甚至不是'優雅' - 注意下面的行沒有它。不知道爲什麼我把它放在上面的代碼中。 – kabanus

1

我用命令:

self.select_folder_btn.configure(command=self.update_folder_value) 

而是綁定的:

self.select_folder_btn.bind('<Button-1>',self.update_folder_value) 

它解決了我的問題。 謝謝