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 会写入一次数据。