亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在函數中無法禁用 tkiner 按鈕

在函數中無法禁用 tkiner 按鈕

慕桂英546537 2023-06-13 10:39:45
基本上,我目前正在編寫一個 python 程序(技術上它是一個游戲),其中某個(TKinter Widget)按鈕只能每 1 秒單擊一次。這是我的意思的一個例子:import timefrom tkinter import *def button_click():    button["state"] = DISABLED    print("button clicked! Please wait 1 second...")    time.sleep(1)    button["state"] = NORMALroot = Tk()button = Button(root, text="Click Me!", command=button_click)button.pack() #Please Dont Tell Me Not To Use Pack() ; I Use Place()所以無論如何,例如,當運行這個程序時,如果我一直點擊按鈕,它會每秒增加 1 個計數。相反,我希望它不計算第一次點擊和之后 1 秒之間發生的所有點擊。
查看完整描述

2 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

這是因為當按鈕被禁用時 tkinter 沒有控制,所以它沒有更新。例如,您需要button.update()在禁用后調用以強制更新:


def button_click():

    button["state"] = DISABLED

    button.update() # force the update

    print("button clicked! Please wait 1 second...")

    time.sleep(1)

    button["state"] = NORMAL

但是,最好使用after()而不是time.sleep():


def button_click():

    button["state"] = DISABLED

    print("button clicked! Please wait 1 second...")

    # enable the button after one second

    button.after(1000, lambda: button.config(state='normal'))


查看完整回答
反對 回復 2023-06-13
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

也許您忘記了代碼末尾的“root.mainloop”。


import time

from tkinter import *

def button_click():

    button["state"] = DISABLED

    print("button clicked! Please wait 1 second...")

    time.sleep(1)

    button["state"] = NORMAL


root = Tk()


button = Button(root, text="Click Me!", command=button_click)


button.pack()


root.mainloop()

這對我有用。您只能每 1 秒按下一次按鈕。


查看完整回答
反對 回復 2023-06-13
  • 2 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號