如何在Python中同时启动线程

问题描述:

我想制作一个播放歌曲的小程序,并在鼠标光标移动时弹出一个图像。我有3个功能用于3个动作,我想同时运行它们,但我无法完成它。你可以帮帮我吗?如何在Python中同时启动线程

import random 
import threading 
import pyautogui 
import pygame 

from tkinter import * 


def play_song(): 
    file = 'Troll_Song.ogg' 

    pygame.mixer.init() 
    pygame.mixer.music.load(file) 
    pygame.mixer.music.play() 

    while pygame.mixer.music.get_busy(): 
     pygame.time.Clock().tick(10) 


def create_window(): 
    while True: 
     root = Tk() 
     root.title('Trololo...') 

     photo = PhotoImage(file='trollface.gif') 
     label = Label(root, image=photo) 
     label.pack() 

     w = 620 # width for the Tk root 
     h = 620 # height for the Tk root 

     # get screen width and height 
     ws = root.winfo_screenwidth() # width of the screen 
     hs = root.winfo_screenheight() # height of the screen 

     # random positions of the window 
     x = random.randint(0, ws - 620) 
     y = random.randint(0, hs - 620) 

     # set the dimensions of the screen 
     # and where it is placed 
     root.geometry('%dx%d+%d+%d' % (w, h, x, y)) 

     root.mainloop() 


def mouse_move(): 
    width, height = pyautogui.size() 

    while True: 
     x = random.randint(0, width) 
     y = random.randint(0, height) 

     pyautogui.moveTo(x, y, duration=0.3) 


if __name__ == '__main__': 
    t1 = threading.Thread(target=create_window()) 
    t2 = threading.Thread(target=play_song()) 
    t3 = threading.Thread(target=mouse_move()) 

    t1.start() 
    t2.start() 
    t3.start() 

我不知道这是否是你的代码是唯一的问题,但我可以告诉线程 - target必须是一个函数,而不是你打电话的功能,使得它们在主线程中运行。所以如果第一个函数是一个无限循环 - 程序不会创建任何线程,因为它会卡住执行第一个函数。下面是你如何做到这一点:

t1 = threading.Thread(target=create_window) 
t2 = threading.Thread(target=play_song) 
t3 = threading.Thread(target=mouse_move) 
+0

谢谢,那工作。 – sziko

+0

@sziko不客气 –