python - 关闭屏幕会杀死 tkinter,从而杀死我的 Python 闹钟。怎么修?
问题描述
这是完整的代码。我是一个初学者,很多代码来自网上。任何事情都会有很大的帮助。
关闭屏幕会杀死 tkinter,从而杀死我的 Python 闹钟。怎么修?
下面的大部分文字都是垃圾我想出来的,所以你不必阅读它:它由 3 个部分组成:时钟 GUI 显示、按钮和闹钟设置,以及关闭/打开监视器功能。设计目标是学习 python 并制作一个唤醒日出的东西,用你的显示器或投影仪模拟日出。因此,当闹钟响起时,投影仪会打开,并显示一个全屏时钟,背景颜色越来越亮。希望让那些需要在黑暗中醒来的人更容易醒来。我相信有更好的实现方式(我用 Chromebook 和 Arduino 控制 IR 来打开投影仪,过去有一个独立的 Arduino 继电器),但它仍然是为了学习。
from tkinter import font as tkfont
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import time
import datetime
import os
import ctypes
def ScreenOff():
return ctypes.windll.user32.SendMessageW(65535, 274, 61808, 2)
def ScreenOn():
return ctypes.windll.user32.SendMessageW(65535, 274, 61808, -1)
root = Tk()
root.geometry("640x480")
root.frame = Frame(root)
root.frame.pack(fill = "both")
label = Label(root, text= "Welcome", bg = "black", fg = "white", font=("Times", 50))
label.pack(side= "top", fill = "both", expand = 1)
root.title_font = tkfont.Font(family = "Times", size = 100, weight = "bold", slant = "italic")
root.title("Clock")
def tick():
global wake
current_time = time.strftime("%I:%M:%S")
label.config(text=current_time)
label.after(200, tick)
# alarm start
def SubmitButton():
AlarmTime= entry1.get()
Message1()
#label2.config(text ="The Alarm will Ring at {} ".format(AlarmTime)) #delayed in execution
CurrentTime = time.strftime("%H:%M")
print("the alarm time is: {}".format(AlarmTime))
#label2.config(text="")
while AlarmTime != CurrentTime:
#label2.config(text ="The Alarm will Ring at {} ".format(AlarmTime))
CurrentTime = time.strftime("%H:%M")
time.sleep(1)
ScreenOff()
if AlarmTime == CurrentTime:
ScreenOn()
print("now Alarm Musing Playing")
os.system("start alarm-music.mp3")
label2.config(text = "Alarm music playing.....")
messagebox.showinfo(title= 'Alarm Message', message= "{}".format(entry2.get()))
def Message1():
AlarmTimeLable= entry1.get()
label2.config(text="the Alarm time is Counting...")
#label2.config(text= "the Alarm will ring at {}".format(AlarmTimeLable))
messagebox.showinfo(title = 'Alarm clock', message = 'Alarm will Ring at {}'.format(AlarmTimeLable))
frame1 = ttk.Frame(root)
frame1.pack()
frame1.config(height = 100, width = 100)
label1= ttk.Label(frame1,text = "Enter the Alarm time :")
label1.pack()
entry1 = ttk.Entry(frame1, width = 30)
entry1.pack()
entry1.insert(3,"example - 13:15")
labelAlarmMessage= ttk.Label(frame1, text="Alarm Message:")
labelAlarmMessage.pack()
entry2= ttk.Entry(frame1, width=30)
entry2.pack()
button1= ttk.Button(frame1, text= "submit", command=SubmitButton)
button1.pack()
#this Label2 will show the Last Alarm Time
label2= ttk.Label(frame1)
label2.pack()
#label2.config(text="hello")
tick()
root.mainloop()
例如,我可以重新启动 Tkinter 吗?还是让它不崩溃?还是让它崩溃但我的闹钟仍在后台工作?
非常感谢!
解决方案
您可以简单地在 Windows 的终端中编写此命令以将程序作为后台进程运行
pythonw ./name.py
您还可以使用 Windows 任务调度程序在后台运行您的程序
推荐阅读
- function - 在方案中显示和返回某些内容的程序?
- php - 如何使代码下的变量成为全局变量并在 php 中为上面的代码工作?
- django - 在另一个列表 jinja 中搜索对象
- python - 为什么 scipy.interpolate.griddata 表现不佳?
- entity-framework-core - 仅更新 EF Core 中的一个字段
- node.js - 无法启动 webpack-dev-server - 未找到模块
- python - 子类化 argparse.ArgumentParser 正在产生奇怪的行为
- mysql - 查询两个不同的表而不重复
- python - 如何比较两个确切的展示位置列表?
- openlayers - 反转 Y 轴