【问题标题】:tk button changes appearancetk 按钮更改外观
【发布时间】:2016-04-24 13:06:37
【问题描述】:

所以我在做这个程序时注意到我的两个按钮最初看起来像这样

在我运行程序一段时间后,第二个按钮将其外观更改为

什么时候发生?

这是我的代码:/ 以防我正在做不应该做的事情。我在 IDLE 的 python 2.7.8 中这样做。

import time
import  Tkinter as tk
from Tkinter import StringVar
import threading
global root
root = tk.Tk()
x = tk.StringVar()
x.set('false')

def xval(*args):
    try:
        for i in range(0,9):
            global x
            print x.get()
            if x.get()== 'false' :
                print "x=false %d time"%i
                time.sleep(1)
            else:
                print "waiting"
            root.update()
    except:
        pass

def stop(event):
                resume_btn.configure(state="normal")
                global x
                x.set('true')
                print "execution stopped:%s"%x


def start(event):
                global x
                x.set('false')
                print "execution started:%s"%x
                xval()


root.title("GUI-Data Retrieval")
th = threading.Event()
t = threading.Thread(target=xval,args=(th,))
t.deamon=True
t.start()
x_btn = tk.Button(root, text="Stop", background="Snow", width=20, relief="raised")
x_btn.grid(row=0, column=4, sticky="W", padx=20, pady=5)
x_btn.bind('<Button-1>',stop)
resume_btn = tk.Button(root, text="Start", background="Snow", width=20, relief="raised")
resume_btn.configure(state="disabled")
resume_btn.grid(row=0, column=6, sticky="W", padx=20, pady=5)
resume_btn.bind('<Button-1>',start)
root.mainloop()

【问题讨论】:

  • 为了他人的利益,可以通过点击Start再点击Stop来重现问题。至于修复,...
  • 为什么在按钮上使用bind 而不是command 属性?这就是问题的根源。
  • @BryanOakley 哦.....终于非常感谢您的帮助...我快疯了...

标签: python-2.7 button tkinter


【解决方案1】:

问题是您的绑定是在默认绑定之前处理的。当按钮被点击时,它是改变按钮外观的默认绑定。您在单击时禁用按钮,从而防止默认行为在您释放鼠标按钮时重置按钮的外观。

除非有特殊原因,否则您应该使用按钮小部件的command 属性,而不是尝试创建自己的绑定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多