python-3.x - 使用 tkinter 进行多处理
问题描述
我正在尝试使用我以前从未使用过的多处理在 tkinter 窗口中运行多个计时器。我不明白为什么当第一个计时器运行并且我启动第二个计时器时,第一个计时器停止了。当我先启动第二个计时器然后单击第一个计时器的任何按钮时,也会发生同样的情况。我不能让两个计时器同时运行。
import time
import datetime
from tkinter import *
import tkinter as tk
import tkinter.font as TkFont
from time import strftime
from multiprocessing import Process
from tkinter import messagebox
def count_down_drink():
global count_flag_drink
count_flag_drink = True
try:
temp = int(hour_drink.get()) * 3600 + \
int(minute_drink.get()) * 60 + int(second_drink.get())
except:
print("Please input the right value")
while temp > -1:
if count_flag_drink == False:
break
mins, secs = divmod(temp, 60)
hours = 0
if mins > 60:
hours, mins = divmod(mins, 60)
hour_drink.set(f"{hours:2d}")
minute_drink.set(f"{mins:2d}")
second_drink.set(f"{secs:2d}")
root.update()
time.sleep(1)
if (temp == 0):
messagebox.showinfo("Time Countdown", "Time's up ")
temp -= 1
# food
def count_down_food():
global count_flag_food
count_flag_food = True
try:
temp = int(hour_food.get()) * 3600 + \
int(minute_food.get()) * 60 + int(second_food.get())
except:
print("Please input the right value")
while temp > -1:
if count_flag_food == False:
break
mins, secs = divmod(temp, 60)
hours = 0
if mins > 60:
hours, mins = divmod(mins, 60)
hour_food.set(f"{hours:2d}")
minute_food.set(f"{mins:2d}")
second_food.set(f"{secs:2d}")
root.update()
time.sleep(1)
if (temp == 0):
messagebox.showinfo("Time Countdown", "Time's up ")
temp -= 1
def main():
p1 = Process(target=count_down_drink)
p1.start()
p2 = Process(target=count_down_food)
p2.start()
if __name__ == '__main__':
root = Tk()
root.geometry("700x500")
root.rowconfigure((0, 1, 2, 3, 4, 5, 6), weight=1)
root.columnconfigure((0), weight=8, uniform='a')
root.columnconfigure((7), weight=1, uniform='a')
root.columnconfigure((1, 2, 3, 4, 5, 6), weight=4, uniform='a')
root.title("2 Timers")
root.configure(bg='#282932')
root.resizable(width=0, height=0)
# Declaration of variables
hour_drink = StringVar()
minute_drink = StringVar()
second_drink = StringVar()
hour_drink.set("04")
minute_drink.set("00")
second_drink.set("00")
hour_food = StringVar()
minute_food = StringVar()
second_food = StringVar()
hour_food.set("04")
minute_food.set("00")
second_food.set("00")
# --------------- drink -----------------------------
drink_event_name = Entry(root, width=10, font=(
'Fira Code', 18), fg='white', bg='#5789d9', justify='center', borderwidth=6)
drink_event_name.grid(row=0, column=0)
drink_hourEntry = Entry(root, width=3, font=('Fira Code', 16), fg='#99ceff', bg='#5a605c', justify='center', borderwidth=1,
textvariable=hour_drink)
drink_hourEntry.grid(row=0, column=1)
drink_event_name.focus_set()
drink_minuteEntry = Entry(root, width=3, font=('Fira Code', 16), fg='#99ceff', bg='#5a605c', justify='center', borderwidth=1,
textvariable=minute_drink)
drink_minuteEntry.grid(row=0, column=2)
drink_secondEntry = Entry(root, width=3, font=('Fira Code', 16), fg='#99ceff', bg='#5a605c', justify='center', borderwidth=1,
textvariable=second_drink)
drink_secondEntry.grid(row=0, column=3)
drink_btn_down = Button(root, text='DOWN', fg='#99ceff', bg='#32475a',
font=('Fira Code', 12), borderwidth='7', width=7, command=count_down_drink)
drink_btn_down.grid(row=0, column=5)
# --------------- food -----------------------------
food_event_name = Entry(root, width=10, font=(
'Fira Code', 18), fg='white', bg='#5789d9', justify='center', borderwidth=6)
food_event_name.grid(row=1, column=0)
food_hourEntry = Entry(root, width=3, font=('Fira Code', 16), fg='#99ceff', bg='#5a605c', justify='center', borderwidth=1,
textvariable=hour_food)
food_hourEntry.grid(row=1, column=1)
food_event_name.focus_set()
food_minuteEntry = Entry(root, width=3, font=('Fira Code', 16), fg='#99ceff', bg='#5a605c', justify='center', borderwidth=1,
textvariable=minute_food)
food_minuteEntry.grid(row=1, column=2)
food_secondEntry = Entry(root, width=3, font=('Fira Code', 16), fg='#99ceff', bg='#5a605c', justify='center', borderwidth=1,
textvariable=second_food)
food_secondEntry.grid(row=1, column=3)
food_btn_down = Button(root, text='DOWN', fg='#99ceff', bg='#32475a',
font=('Fira Code', 12), borderwidth='7', width=7, command=count_down_food)
food_btn_down.grid(row=1, column=5)
# food end -----------------------------------------------------------------
root.mainloop()
解决方案
推荐阅读
- angular - 模拟服务不会在角度测试中禁用按钮?
- python - 通过 FILEID 发送文件
- php - 在这里,我正在使用 Laravel 共享 API 的响应,其中我想在 'doctor_detail_data' 数组而不是 'doctor_requests' 中专门化名称
- machine-learning - 我们是否需要在 Pyspark ML 中分别保存和加载管道和模型?
- python - 如何将 API 数据保存到 csv 文件中?另外如何修复回溯错误?
- amazon-web-services - 通过 Kinesis Stream 或 Firehose 写入 S3
- amazon-web-services - 成功生成 S3 预签名 URL 后,为什么会收到“拒绝访问”?
- swiftui - 如何防止 SwiftUI 在 ForEach 循环中重新初始化 Initialized-View?
- python - 我需要使用 pandas 数据框根据第二个分类变量中的值来估算分类变量的缺失值
- javascript - 控制台中关于 Promise 的输出