鱼C论坛

 找回密码
 立即注册
查看: 1830|回复: 1

nonebot与tkinter之间怎么写

[复制链接]
发表于 2022-9-19 09:05:00 | 显示全部楼层 |阅读模式
60鱼币
想写一个有界面的qq机器人插件,但是出现了以下几个问题。
1.用函数返回值方法调用gid列表,但是因为用了nonebot官方的事件通知和装饰器提示无法参数错误:TypeError: qlb() missing 2 required positional arguments: 'bot' and 'event'
  1. import nonebot,asyncio
  2. from nonebot.adapters.onebot.v11 import GroupIncreaseNoticeEvent,Bot,Adapter,LifecycleMetaEvent
  3. from nonebot import on_metaevent,on_notice
  4. from tkinter import *

  5. nonebot.init()
  6. driver = nonebot.get_driver()
  7. driver.register_adapter(Adapter)

  8. # 实例一个元事件响应器
  9. ysj = on_metaevent()
  10. # 获取群列表
  11. @ysj.handle()
  12. async def qlb(bot:Bot,event:LifecycleMetaEvent):
  13.     glds = await bot.get_group_list()
  14.     gid = []
  15.     for gld in glds:
  16.         gid.append(str(gld['group_id']))  
  17.     return gid

  18. chko = Tk()
  19. chko.geometry('850x680')# 设置窗口大小
  20. # 创建一个空列表框
  21. qcylb = Listbox(chko)
  22. qcylb.pack()
  23. # 在列表框添加数据
  24. gid = asyncio.run(qlb())
  25. for qcyk in gid:
  26.     qcylb.insert(END,qcyk)
  27. mainloop()

  28. if __name__ == "__main__":
  29.     nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
  30.     nonebot.run()
复制代码

2.我又尝试了global gid 定义函数变量到全局,但在运行时会报错提示gid未定义:NameError: name 'gid' is not defined
  1. import nonebot,asyncio
  2. from nonebot.adapters.onebot.v11 import GroupIncreaseNoticeEvent,Bot,Adapter,LifecycleMetaEvent
  3. from nonebot import on_metaevent,on_notice
  4. from tkinter import *

  5. nonebot.init()
  6. driver = nonebot.get_driver()
  7. driver.register_adapter(Adapter)

  8. # 实例一个元事件响应器
  9. ysj = on_metaevent()
  10. # 获取群列表
  11. @ysj.handle()
  12. async def qlb(bot:Bot,event:LifecycleMetaEvent):
  13.     glds = await bot.get_group_list()
  14.     global gid
  15.     gid = []
  16.     for gld in glds:
  17.         gid.append(str(gld['group_id']))  

  18. chko = Tk()
  19. chko.geometry('850x680')# 设置窗口大小
  20. # 创建一个空列表框
  21. qcylb = Listbox(chko)
  22. qcylb.pack()
  23. # 在列表框添加数据
  24. for qcyk in gid:
  25.     qcylb.insert(END,qcyk)
  26. mainloop()

  27. if __name__ == "__main__":
  28.     nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
  29.     nonebot.run()
复制代码

3.最后我尝试了把窗口部分定义为函数,然后在获取到gid时调用窗口函数,这样虽然成功在列表框添加了数据,但是却卡在这里不在执行后面代码,必须关闭窗口后在往下执行
  1. import nonebot,asyncio
  2. from nonebot.adapters.onebot.v11 import GroupIncreaseNoticeEvent,Bot,Adapter,LifecycleMetaEvent
  3. from nonebot import on_metaevent,on_notice
  4. from tkinter import *

  5. nonebot.init()
  6. driver = nonebot.get_driver()
  7. driver.register_adapter(Adapter)

  8. # 实例一个元事件响应器
  9. ysj = on_metaevent()
  10. # 获取群列表
  11. @ysj.handle()
  12. async def qlb(bot:Bot,event:LifecycleMetaEvent):
  13.     glds = await bot.get_group_list()
  14.     global gid
  15.     gid = []
  16.     for gld in glds:
  17.         gid.append(str(gld['group_id']))  
  18.     tkck(gid)
  19. def tkck(gid):
  20.     chko = Tk()
  21.     chko.geometry('850x680')# 设置窗口大小
  22.     # 创建一个空列表框
  23.     qcylb = Listbox(chko)
  24.     qcylb.pack()
  25.     # 在列表框添加数据
  26.     for qcyk in gid:
  27.         qcylb.insert(END,qcyk)
  28.     mainloop()
  29. tzsj = on_notice()
  30. # 群通知监听
  31. @tzsj.handle()
  32. async def qzd(bot: Bot, event: GroupIncreaseNoticeEvent):
  33.     if str(event.group_id) in gid2:
  34.         uid = str(event.user_id)
  35.         print(uid)
  36.    
  37. if __name__ == "__main__":
  38.     nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
  39.     nonebot.run()
复制代码
大佬们,我该怎么办

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-9-19 20:30:33 | 显示全部楼层
有没有懂这个的大佬解答下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表