單擊訊息框后,我想呼叫函式(提交)。使用此代碼,我必須每次在訊息框后重新單擊按鈕,但如果計時器在單擊訊息框后自動啟動,我將不勝感激。
如果有人有線索,我將不勝感激。
以下代碼:
import time
from tkinter import *
root = Tk()
root.resizable(width=False, height=False)
root.geometry("300x250")
root['background']='#39E5F9'
root.title("Time To Drink Water")
minute = StringVar()
second = StringVar()
minute.set("45")
second.set("00")
minuteEntry = Entry(root, width=3, font=("Arial", 35, ""),
textvariable=minute,justify='center')
minuteEntry.place(x=50, y=60)
secondEntry = Entry(root, width=3, font=("Arial", 35, ""),
textvariable=second,justify='center')
secondEntry.place(x=170, y=60)
def submit():
# stored in here : 2700 = 45 mins
temp = 2700
while temp > -1:
# divmod(firstvalue = temp//60, secondvalue = temp`)
mins, secs = divmod(temp, 60)
if mins > 60:
hours, mins = divmod(mins, 60)
minute.set("{0:2d}".format(mins))
second.set("{0:2d}".format(secs))
root.update()
time.sleep(1)
if (temp == 0):
messagebox.showinfo("Time Countdown", "Time To Drink !")
temp -= 1
def go():
btn = Button(root, text='Goodbye dehydration!', bd='6',
command=submit)
btn.place(x=90, y=160)
go()
root.mainloop()
uj5u.com熱心網友回復:
messagebox正在等待您的點擊,以便您可以運行,它會在點擊后submit()運行messageboxmessagebox
但是你不應該使用whileandsleep因為它可能會凍結 GUI(在任何框架和任何語言中)。您可以root.after(1000, function)在 1000 毫秒(1 秒)后再次使用該功能運行,它可以sleep一起作業while。
import time
import tkinter as tk # PEP8: `import *` is not preferred
from tkinter import messagebox
# --- functions --- # PEP8: all functions before main code
def submit():
update_counter(2700)
def update_counter(temp):
if temp > -1: # `if` instead of `while` because `after` will work as loop
# divmod(firstvalue = temp//60, secondvalue = temp`)
mins, secs = divmod(temp, 60)
if mins > 60:
hours, mins = divmod(mins, 60)
minute.set("{:02d}".format(mins)) # use `:02` to get `09` instead of ` 9` (with space)
second.set("{:02d}".format(secs))
temp -= 1
root.after(1000, update_counter, temp) # run again after 1000ms
else:
messagebox.showinfo("Time Countdown", "Time To Drink !")
root.after(0, update_counter, 2700) # run again after 0ms
#update_counter(2700) # run again
# --- main --- # PEP8: `lower_case_names` for variables
running = False
temp = 2700
root = tk.Tk()
minute = tk.StringVar(root)
second = tk.StringVar(root)
minute.set("45")
second.set("00")
minute_entry = tk.Entry(root, width=3, textvariable=minute, font=("Arial", 35, ""), justify='center')
minute_entry.grid(row=0, column=0)
second_entry = tk.Entry(root, width=3, textvariable=second, font=("Arial", 35, ""), justify='center')
second_entry.grid(row=0, column=1)
btn = tk.Button(root, text='Goodbye dehydration!', command=submit)
btn.grid(row=1, column=0, columnspan=2)
root.mainloop()
PEP 8——Python 代碼風格指南
還有其他問題。您可以單擊按鈕兩次,它將同時運行兩個update_counter()。它可能需要禁用按鈕,或者您必須使用布爾變數 - 即。running = False- 控制它是否必須運行update_counter()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/505397.html
上一篇:無法使用Tkinter更改RangeSlider庫中數字的顏色
下一篇:生成文本時,文本顯示<functionsat0x000001B240AB3E2>如何在tkinterpython中正確顯示生成的內容?
