鱼C论坛

 找回密码
 立即注册
查看: 4492|回复: 10

[已解决]多线程的问题

[复制链接]
发表于 2023-2-22 21:29:49 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我写了一个 tk 窗口,打算点击按钮的时候派生子线程执行任务.
求求各位大神给下代码或者实现的思路吧
(除了最佳答案还会给鱼币)
@isdkz @歌者文明清理员 @学习编程中的Ben @tommyyu
(暂时给不了 tkinter 窗口的代码,因为在用手机)
最佳答案
2023-2-22 21:37:26
本帖最后由 isdkz 于 2023-2-23 08:27 编辑

像这样子?
from tkinter import *
from threading import Thread
from time import sleep

def task(s):
    while True:
        print(f'执行{s}')
        sleep(2)
root = Tk()
b1 = Button(text="派生子线程", command=lambda: Thread(target=task, args=("任务一",)).start())
b1.pack()
mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-22 21:37:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-2-23 08:27 编辑

像这样子?
from tkinter import *
from threading import Thread
from time import sleep

def task(s):
    while True:
        print(f'执行{s}')
        sleep(2)
root = Tk()
b1 = Button(text="派生子线程", command=lambda: Thread(target=task, args=("任务一",)).start())
b1.pack()
mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-22 22:12:45 | 显示全部楼层
我因为审核已经私信作者
https://fishc.com.cn/thread-224588-1-2.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-23 07:23:34 | 显示全部楼层

不对
这样重复点击按钮会报错
应该
def func():
    Thread(target=task, args=[]).start()  # 这样每次都声称一个不同的Thread
def task():
    pass
button['command'] = func
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-23 08:24:57 | 显示全部楼层
歌者文明清理员 发表于 2023-2-23 07:23
不对
这样重复点击按钮会报错
应该

好吧,是我疏忽了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-24 18:20:04 | 显示全部楼层

感谢大佬
就是任务执行过后会报一个
RuntimeError: Calling Tcl from different apartment
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-24 18:22:12 | 显示全部楼层
liuhongrun2022 发表于 2023-2-24 18:20
感谢大佬
就是任务执行过后会报一个

你的代码方便放出来吗?我看看什么问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-24 20:05:30 | 显示全部楼层
isdkz 发表于 2023-2-24 18:22
你的代码方便放出来吗?我看看什么问题

库:
import os
from tkinter.messagebox as msgbox
from tkinter import *
from threading import Thread
from pdf2docx import Converter
函数的代码:
def pdf_to_word():
    try:
        pdffile = tf.askopenfilename(title='选择PDF文档') # 选择文件
        wordfile = os.path.splitext(pdffile)[0] + '.docx'
        cv = Converter(pdffile)
        cv.convert(wordfile)
        cv.close()
        msgbox.show_info('转换成功!')
    except FileNotFoundError:
        msgbox.showerror('你没有选择任何文件!')
Button:
b2 = Button(root, text='pdf单文件转word', command=lambda: Thread(target=pdf_to_word).start())
b2.pack(side=LEFT, padx=5, pady=5, fill=BOTH)
这个任务执行完会报这个错误
因为直接用主进程执行完会未响应,然后等一会又好了
所以用子进程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 12:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表