在Tkinter中使用Pyrogram与线程时出现错误
错误代码:
我按下发送消息的按钮,一切正常;我按下停止按钮,还是正常的,但 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
1 个回答
0
我觉得你只是忘了在第46行的app.stop调用中加上括号。
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()
希望我能帮到你,祝你有个愉快的一天!