Python同时运行tkinter和openpyxl(定时任务)

import datetime
from openpyxl import Workbook
from apscheduler.schedulers.blocking import BlockingScheduler
import time
import tkinter
from tkinter import Label

filename = 'dat.xlsx'
wb = Workbook()
ws = wb.active
ws.column_dimensions['A'].width = 30
ws.append(["day", "time"])
top = tkinter.Tk()
top.geometry('1980x1080')

def func():
    now = datetime.datetime.now()
    current_time = datetime.datetime.now()
    ws.append([current_time.strftime("%Y-%m-%d"), current_time.strftime("%H:%M:%S")])
    wb.save(filename)
def get_time():
    time2 = time.strftime('%Y-%m-%d %H:%M:%S')
    clock = Label(top, text=time2, font=28,fg='green')
    clock.place(x=15, y=15)
    clock.after(1000,get_time)
def dojob():
    scheduler = BlockingScheduler()
    scheduler.add_job(func, 'interval', seconds=1)
    scheduler.start()


get_time()
top.mainloop()
dojob()

请问一下怎么样才能同时运行tkinter和openpyxl。

tkinter窗口的时间运行的时候,
openpyxl的时间每一秒加一行

你可以使用after函数在 tkinter 中实现循环的更新显示时间,并且通过使用APScheduler 实现对 openpyxl 的每秒写入操作。代码如下:


```python
import datetime
from openpyxl import Workbook
from apscheduler.schedulers.background import BackgroundScheduler
import tkinter
from tkinter import Label

filename = 'dat.xlsx'
wb = Workbook()
ws = wb.active
ws.column_dimensions['A'].width = 30
ws.append(["day", "time"])
top = tkinter.Tk()
top.geometry('1980x1080')

def func():
    now = datetime.datetime.now()
    current_time = datetime.datetime.now()
    ws.append([current_time.strftime("%Y-%m-%d"), current_time.strftime("%H:%M:%S")])
    wb.save(filename)

def get_time():
    time2 = time.strftime('%Y-%m-%d %H:%M:%S')
    clock = Label(top, text=time2, font=28, fg='green')
    clock.pack()
    clock.after(1000, get_time)

def do_job():
    scheduler = BackgroundScheduler()
    scheduler.add_job(func, 'interval', seconds=1)
    scheduler.start()

get_time()
do_job()
top.mainloop()


```
这样 tkinter 就会循环显示时间,并且每秒钟 openpyxl 会写入一次数据。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^