在 Tkinter 中使用 Pyrogram 和 Threading 时出现错误

问题描述 投票:0回答:1

错误代码;

我按发送消息键,一切正常,我按停止键,再次正常,但app.stop没有停止,再次发送消息时出现错误

代码;

from customtkinter import *
import customtkinter as ctk
from threading import Thread
import time, os, asyncio
from pyrogram import Client
from pyrogram.enums import MessageMediaType

run = True
path = os.getcwd()
app = Client(path + "\\users\\" + "user")
async def tg_bot():
    global run
    global app  # Reference the global app variable
    s = 0
    await app.start()
    async for ii in app.get_chat_history(-1002070231241):
        if ii.media == MessageMediaType.VIDEO:
            if run:
                s = s + 1
                await app.copy_message(-1002142940185, -1002070231241, ii.id, caption="")
                print(s, "sended.")
                await asyncio.sleep(1)

    await app.stop()

def start():
    global run
    run = True

    def don(dongu, _e):
        try:
            dongu.run_until_complete(tg_bot())
        finally:
            dongu.close()

    loop = asyncio.get_event_loop()
    event = asyncio.Event()
    oto = Thread(target=don, args=(loop, event))
    oto.daemon = True
    oto.start()

def stop():
    global run
    run = False
    global app
    app.stop

root = ctk.CTk()
root.geometry("300x300")
basla = CTkButton(root, text="message send", command=start)
basla.place(x=75, y=100)

dur = CTkButton(root, text="stop", command=stop)

dur.place(x=75, y=200)

root.mainloop()

视频;

https://drive.google.com/file/d/1tTuNKZ_WR9KK7WOjXbdzP3-M_TC4l6yk/view?usp=drive_link

python multithreading tkinter customtkinter pyrogram
1个回答
0
投票

我想你只是忘了在应用程序中添加括号。停止第 46 行的调用。

app.stop

您只需添加括号即可:

app.stop()

完整代码现在是:

from customtkinter import *
import customtkinter as ctk
from threading import Thread
import time, os, asyncio
from pyrogram import Client
from pyrogram.enums import MessageMediaType

run = True
path = os.getcwd()
app = Client(path + "\\users\\" + "user")
async def tg_bot():
    global run
    global app  # Reference the global app variable
    s = 0
    await app.start()
    async for ii in app.get_chat_history(-1002070231241):
        if ii.media == MessageMediaType.VIDEO:
            if run:
                s = s + 1
                await app.copy_message(-1002142940185, -1002070231241, ii.id, caption="")
                print(s, "sended.")
                await asyncio.sleep(1)

    await app.stop()

def start():
    global run
    run = True

    def don(dongu, _e):
        try:
            dongu.run_until_complete(tg_bot())
        finally:
            dongu.close()

    loop = asyncio.get_event_loop()
    event = asyncio.Event()
    oto = Thread(target=don, args=(loop, event))
    oto.daemon = True
    oto.start()

def stop():
    global run
    run = False
    global app
    app.stop()

root = ctk.CTk()
root.geometry("300x300")
basla = CTkButton(root, text="message send", command=start)
basla.place(x=75, y=100)

dur = CTkButton(root, text="stop", command=stop)

dur.place(x=75, y=200)

root.mainloop()

希望我能帮到你,祝你有美好的一天

© www.soinside.com 2019 - 2024. All rights reserved.