如何使用pythontkinter程序使用线程?

2024-09-29 21:58:17 发布

您现在位置:Python中文网/ 问答频道 /正文

from tkinter import *
from tkinter import ttk
from tkinter import filedialog


# initialize gui interface
root=Tk()
root.geometry("510x200")

global folder_selected, path

def getFolderPath():

      # do somthing

btnFind = ttk.Button(root, text="Browse Folder",command=getFolderPath)


def down():     

        #do somthing


dwn=ttk.Button(root,text="Download",width='25',command=down)
dwn.place(x=190,y=120)

root.mainloop()  

在这个程序中,我想使用线程。我不知道如何在这个程序中使用Python实现线程


Tags: textfromimport程序tkinterdefbuttonroot
1条回答
网友
1楼 · 发布于 2024-09-29 21:58:17

您应该使用threading模块。我为你写了一点代码。background函数可以在分离的线程上启动函数

如果你的函数有输入参数,你可以像这样传递它们:command=lambda : background(print_numbers, (50,)))。重要提示:args必须是元组,即使它只是一个元组

代码:

import tkinter as tk
from tkinter import ttk
import threading
import time

root = tk.Tk()
root.geometry("510x200")


def getFolderPath():
    print("getFolderPath. Thread: {}".format(threading.get_ident()))
    time.sleep(10)


def down():
    print("Down. Thread: {}".format(threading.get_ident()))


def background(func, args):
    th = threading.Thread(target=func, args=args)
    th.start()


btnFind = ttk.Button(root, text="Browse Folder", command=lambda: background(getFolderPath, ()))
btnFind.place(x=0, y=0)

dwn = ttk.Button(root, text="Download", width="25", command=lambda: background(down, ()))
dwn.place(x=190, y=120)


root.mainloop()

获取窗口:

getting window

控制台输出:(如果单击按钮)

>>> python3test_file.py 
Down. Thread: 140212479096576
Down. Thread: 140212479096576
getFolderPath. Thread: 140212479096576
getFolderPath. Thread: 140212468516608
getFolderPath. Thread: 140212460123904
Down. Thread: 140212451731200
getFolderPath. Thread: 140212451731200
Down. Thread: 140212443338496

你可以看到线程的ID是不同的。这意味着任务在不同的线程上运行

相关问题 更多 >

    热门问题