Python запускает 2 бесконечных цикла while - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь создать программу, которая по сути является cookie-кликером.Как сделать так, чтобы окно tkinter обновлялось как для одной вещи, так и раз в секунду для другой?

Это для новенького пользователя Python, я использую школьный MacBook Air.Я пытался использовать многопроцессорность, Ray и Thread, но все, что я вижу в них, смущает меня.Я попытался использовать вложенный цикл while, но это заставляло окно обновляться только один раз в секунду, когда мне нужно, чтобы оно обновлялось как при нажатии клавиш, так и раз в секунду.

import random, time, threading, multiprocessing
click_number = 400
tap_num = 0
tap_num = 0
event1 = 0
event2 = 0
event3 = 0
event4 = 0

def click_button():
    global click_number, event1, event2, event3, event4
    click_number += 1
    click_number_label.config(text=click_number)
    if click_number >= 500 and event4 == 0:
        root.title("Alright, Now That You Have Gotten This Many Clicks I'll Show You How To Use Them")
        canvas.config(width=1260,height=768)
        click_number_label.place(x=random.randint(0,1260),y=random.randint(0,768))
        notification_label.place_forget()
        buy_button.grid(column=2,row=0)
        root.attributes('-fullscreen',True)
        event4 = 1
    elif click_number >= 500 and event4 != 0:
        click_number_label.place(x=random.randint(0,1260),y=random.randint(0,768))
    elif click_number >= 200 and event3 == 0:
        root.title("Here, I'll Give You Something To Make This A Little Easier")
        canvas.bind("<Key>",tap_button)
        notification_label.place(x=400,y=100)
        event3 = 1
    elif click_number >= 100 and event2 == 0:
        root.title("You're Still Going At It Huh?")
        event2 = 1
    elif click_number >= 50 and event1 == 0:
        root.title("Wow, That's A Lot Of Clicks")
        event1 = 1
    root.update()

def tap_button(event):
    global click_number, event1, event2, event3, event4
    click_number += 1
    click_number_label.config(text=click_number)
    if click_number >= 500 and event4 == 0:
        root.title("Alright, Now That You Have Gotten This Many Clicks I'll Show You How To Use Them")   
        canvas.config(width=1260,height=768)
        click_number_label.place(x=1260/2,y=330)
        notification_label.place_forget()
        buy_button.grid(column=2,row=0)
        root.attributes('-fullscreen',True)
        event4 = 1
    elif click_number >= 500 and event4 != 0:
        click_number_label.place(x=1260/2,y=330)
    elif click_number >= 200 and event3 == 0:
        root.title("Here, I'll Give You Something To Make This A Little Easier")
        canvas.bind("<Key>",tap_button)
        notification_label.place(x=400,y=100)
        event4 = 1
    root.update()

def add_tapper():
    global tap_num
    global click_number
    if click_number >= 100:
        tap_num += 1
        click_number -= 100
        tap_num_label.config(text=tap_num)
        click_number_label.config(text=click_number)
        root.update()

click_number_label = Label(root,text=click_number,justify=CENTER)
click_number_label.place(x=380,y=330)

root = Tk()
root.configure(background='#40005c')

canvas = Canvas(root,width=800, height=600,background='#40005c',highlightbackground='#4a005c')
canvas.grid(column=1,row=0)
canvas.focus_set()

yag = PhotoImage(file="table.ppm")
click_button = Button(root,command=click_button)
click_button.config(image=yag,width=300,height=300)
click_button.grid(column=1,row=0)

buy_button = Button(root,text='More Clicks',command=add_tapper)
tap_num_label = Label(root,text=tap_num)
tap_num_label.place(x=500,y=500)

def loop():
    while True:
        root.update()

def passive():
    while True:
        if tap_num >= 1:
            click_number = click_number + tap_num
            click_number_label.config(text=click_number)
            root.update()
            time.sleep(1)

if __name__ == '__main__':
    t1 = multiprocessing.Process(target=loop)
    t2 = multiprocessing.Process(target=passive)

t1.start()
t2.start()

Я ожидал, что оно будет запускать обаЦикл постоянно обновляет окно, а также другой цикл, так что он будет обновлять счетчик того, сколько раз вы нажали кнопку не раз в секунду.Вместо этого я получил эту ошибку:

Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.

Я не знаю, что означает эта ошибка, поэтому я не знал, как ее исправить.

...