python - 如何为线程调用的函数提供参数
问题描述
import tkinter as tk
import threading
import time
def count(timeamt):
time.sleep(timeamt)
tk.Label(win, text='5 sec done').grid(row = 0, column = 1)
def start():
t1 = threading.Thread(target=count, args=(5))
t1.start()
# count(5)
tk.Label(win, text = 'started').grid(row = 1, column = 1)
win = tk.Tk()
win.geometry('200x200')
tk.Button(win, text = "hi", command = start).grid(row = 2, column = 5)
win.mainloop()
这是行不通的
Traceback (most recent call last):
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 932, in _bootstrap_inner
self.run()
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
TypeError: count() argument after * must be an iterable, not int
解决方案
尝试这个:
import tkinter as tk
import time
def count():
label = tk.Label(win, text="5 sec done")
label.grid(row=0, column=1)
def start():
# 5 sec = 5000 ms
win.after(5000, count)
label = tk.Label(win, text="started")
label.grid(row=1, column=1)
win = tk.Tk()
win.geometry("200x200")
btn = tk.Button(win, text="hi", command=start)
btn.grid(row=2, column=5)
win.mainloop()
我删除了线程并win.after
改为使用。有关该.after
方法的更多信息,请阅读此
推荐阅读
- php - 用 ID 替换 Wordpress 菜单(使用 functions.php)
- typescript - Typescript:推断有效负载类型并将其传递给回调
- javascript - 我们将 e.target.name 写入状态定义语句的目的是什么?
- java - Java“错误”:“未找到”,“消息”:“没有可用消息”,
- r - 如何更快地获得数据集中每个点到其他点的平均曼哈顿距离
- java - Android canvas.drawText 使用paint显示坏颜色
- java - 我的录音机将旧录音替换为新录音,而不是创建新文件
- dependency-injection - 在 application.cfc FW1 中注入依赖项
- node.js - 使用 node-postgres 与数据库失去连接
- flutter - 使用刷新指示器 Flutter 无限滚动 HTTP JSON