按钮行为

时间:2016-11-24 11:59:22

标签: python tkinter

我使用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保持不变。

2 个答案:

答案 0 :(得分: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命令中定义它。你做的是绕过按钮机制,所以显然只有一半被执行,并且没有提升浮雕。请注意,您必须删除方法接受的事件参数。

答案 1 :(得分:1)

我使用了命令:

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

而不是绑定:

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

它解决了我的问题。 感谢