2016-11-24 32 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) 

它解决了我的问题。 谢谢