root1 = tkinter.Tk() root1.withdraw() root1.geometry('800x200') if now2 in ti:#当当天时间是计划开始时间的列表里 root1.after(1000, tishi)#启动弹框信息 def createTimer():#因为第一次启动需要间隔时间,所以以上代码是手工第一次检查当前时间是否是计划开始时间 t = threading.Timer(10, repeat)#threading.Timer为定时方法(间隔时间(以秒为单位),所要执行的函数) t.start() def repeat():#重复上面的操作,获取当前时间与计划开始时间的列表进行匹配 createTimer() now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') now1 = datetime.datetime.strptime(now, '%Y-%m-%d %H:%M:%S') now2 = str(now1).split(' ')[0] print(now2) if now2 in ti: root1.after(1000, tishi) createTimer() root1.mainloop()怎样停止 threading.timer
时间: 2024-03-18 19:42:11 浏览: 62
要停止 `threading.Timer`,可以使用 `cancel()` 方法来取消定时器。在你的代码中,需要在 `repeat()` 函数中添加一个判断条件,以便在需要时可以取消定时器。例如:
```python
def repeat():
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
now1 = datetime.datetime.strptime(now, '%Y-%m-%d %H:%M:%S')
now2 = str(now1).split(' ')[0]
print(now2)
if now2 in ti:
root1.after(1000, tishi)
else:
t.cancel() # 如果不是计划开始时间,取消定时器
```
在这个修改后的代码中,如果当前时间不在计划开始时间列表中,定时器将被取消。这将防止定时器无限期地运行下去。
相关问题
from tkinter import filedialog import tkinter root = tkinter.Tk() root.withdraw()
这段代码使用了Python的tkinter库中的filedialog模块,用于创建打开/保存文件对话框。其中,root = tkinter.Tk()创建了一个Tkinter.Tk()实例,而root.withdraw()则是将该实例隐藏起来,不显示在程序窗口中。这通常是因为代码中并不需要显示该实例,它只是用于提供一个Tkinter环境来运行filedialog模块。
需要注意的是,如果不加上root = tkinter.Tk()和root.withdraw()这两行代码,可能会在文件对话框中出现一个空白的Tkinter窗口。因此在使用filedialog模块前,需要先创建一个Tkinter实例并将其隐藏起来。
范例:从tkinter中导入filedialog模块,并创建root实例并隐藏起来
```python
from tkinter import filedialog
import tkinter
root = tkinter.Tk() # 创建一个Tkinter.Tk()实例
root.withdraw() # 将Tkinter.Tk()实例隐藏
```
from tkinter import * import tkinter.messagebox import tkinter.filedialog from openpyxl import load_workbook workbook=load_workbook(filename='demo.xlsx') root=tkinter.Tk() root.title('测试') root.geometry('520x200') root.resizable(False,False) kk={1:'Sheet1',2:'Sheet2'} filepath00=tkinter.Entry() filepath00.grid(row=1,column=2) def oo(): p = filepath00.get() p1=int(p) kk[1] bb=Button(root,text='提取',command=oo) bb.grid(row=1,column=3)
这段代码存在几个问题:
1. 需要将 tkinter 的 import 语句放在一行中,即 `from tkinter import *, tkinter.messagebox, tkinter.filedialog`。
2. 在导入 openpyxl 库后,需要通过加载工作簿来打开 Excel 文件,但是在代码中并没有指定要打开的工作簿,应该将 `workbook=load_workbook(filename='demo.xlsx')` 放在 oo() 函数内,并且在 oo() 函数中指定要打开的工作簿。
3. 在 oo() 函数中,需要通过 p1 变量来获取要打开的工作表的编号,然后根据编号获取对应的工作表名称。但是在代码中,p1 变量没有被使用,并且 kk[1] 没有返回值,应该将 kk[1] 替换为 kk[p1]。
4. 在 oo() 函数中,需要添加代码来获取要提取的数据,并将数据输出到 GUI 界面中。
修改后的代码如下:
```
from tkinter import *, tkinter.messagebox, tkinter.filedialog
from openpyxl import load_workbook
root = tkinter.Tk()
root.title('测试')
root.geometry('520x200')
root.resizable(False,False)
kk = {1:'Sheet1', 2:'Sheet2'}
filepath00 = tkinter.Entry()
filepath00.grid(row=1, column=2)
def oo():
p = filepath00.get()
p1 = int(p)
sheet_name = kk[p1]
workbook = load_workbook(filename='demo.xlsx')
sheet = workbook[sheet_name]
data = []
for row in sheet.iter_rows(min_row=2):
row_data = []
for cell in row:
row_data.append(cell.value)
data.append(row_data)
for i in range(len(data)):
for j in range(len(data[i])):
label = tkinter.Label(root, text=str(data[i][j]))
label.grid(row=i+3, column=j)
bb = Button(root, text='提取', command=oo)
bb.grid(row=1, column=3)
root.mainloop()
```
阅读全文