from re import fullmatch
from datetime import datetime
from pyperclip import copy
from pyautogui import hotkey
from schedule import every
from tkinter import Button, Entry, Frame, Label, messagebox, Tk
def schedule_task():
text = entry_text.get().replace(" ", "\t")
hour_str = entry_set_hour.get()
minute_str = entry_set_minute.get()
second_str = entry_set_second.get()
if not fullmatch(r'^[0-2]\d:[0-5]\d:[0-5]\d$', f"{hour_str}:{minute_str}:{second_str}"):
messagebox.showerror("时间格式错误!", "请重新输入:")
return
target_time = datetime.now().replace(
hour=int(hour_str),
minute=int(minute_str),
second=int(second_str),
microsecond=0
)
copy(text=text)
every().day.at(target_time.strftime("%H:%M:%S")).do(lambda: hotkey("ctrl", "v"))
def execute_task():
messagebox.showinfo("提示", "开始执行")
start_button.config(state="disabled")
schedule_task()
start_button.config(state="normal")
messagebox.showinfo("提示", "已完成")
win = Tk()
win.geometry("480x360")
win.title("定时粘贴")
frame = Frame(win)
frame.pack(padx=15, pady=15)
label_text = Label(frame, text="输入文本:", font=("SimSun", 18))
label_text.grid(row=0, column=0, padx=10, pady=10)
# entry_text = Entry(frame, font=("SimSun", 2))
entry_text = Entry(frame, font=("SimSun", 16))
entry_text.grid(row=0, column=1, padx=10, pady=10)
label_set_time = Label(frame, text="设定时间:", font=("SimSun", 18))
label_set_time.grid(row=1, column=0, padx=10, pady=20)
entry_set_hour = Entry(frame, font=("SimSun", 16), width=2)
entry_set_hour.grid(row=1, column=1, padx=2, pady=20)
label_set_hour = Label(frame, text="时", font=("SimSun", 12))
label_set_hour.grid(row=1, column=2, padx=0, pady=20)
entry_set_minute = Entry(frame, font=("SimSun", 16), width=2)
entry_set_minute.grid(row=1, column=3, padx=2, pady=20)
label_set_minute = Label(frame, text="分", font=("SimSun", 12))
label_set_minute.grid(row=1, column=4, padx=0, pady=20)
entry_set_second = Entry(frame, font=("SimSun", 16), width=2)
entry_set_second.grid(row=1, column=5, padx=2, pady=20)
label_set_second = Label(frame, text="秒", font=("SimSun", 12))
label_set_second.grid(row=1, column=6, padx=0, pady=20)
start_button = Button(frame, text="开始", font=("SimSun", 36), command=execute_task, state="normal")
start_button.grid(row=2, column=0, pady=10)
win.mainloop()
【以下回答由 GPT 生成】
首先,我们需要使用grid布局管理器来控制entry_set_hour控件的宽度。然后,我们可以设置其columnspan属性为2,使其跨越两列,从而保持固定宽度。在代码中,我们需要将entry_set_hour的grid调用改为如下所示:
entry_set_hour.grid(row=0, column=2, columnspan=2)
修改后的代码如下:
from re import fullmatch
from datetime import datetime
from pyperclip import copy
from pyautogui import hotkey
from schedule import every
from tkinter import Button, Entry, Frame, Label, messagebox, Tk
def schedule_task():
text = entry_text.get().replace(" ", "\t")
hour_str = entry_set_hour.get()
minute_str = entry_set_minute.get()
second_str = entry_set_second.get()
if not fullmatch(r'^[0-2]\d:[0-5]\d:[0-5]\d$', f"{hour_str}:{minute_str}:{second_str}"):
messagebox.showerror("时间格式错误!", "请重新输入:")
return
target_time = datetime.now().replace(
hour=int(hour_str),
minute=int(minute_str),
second=int(second_str),
microsecond=0
)
copy(text=text)
every().day.at(target_time.strftime("%H:%M:%S")).do(lambda: hotkey("ctrl", "v"))
def execute_task():
messagebox.showinfo("提示", "开始执行")
start_button.config(state="disabled")
schedule_task()
start_button.config(state="normal")
messagebox.showinfo("提示", "已完成")
win = Tk()
win.geometry("480x360")
win.title("定时粘贴")
frame = Frame(win)
frame.pack(padx=15, pady=15)
label_text = Label(frame, text="输入文本:", font=("SimSun", 18))
label_text.grid(row=0, column=0, padx=10, pady=10)
entry_text = Entry(frame, font=("SimSun", 16))
entry_text.grid(row=0, column=1)
entry_set_hour = Entry(frame, width=2, font=("SimSun", 16))
entry_set_hour.grid(row=0, column=2, columnspan=2)
这样,entry_set_hour控件的宽度将固定为2个字符的宽度,不再随上一行控件的宽度变化而变化。