GUI 点击响应函数的参数传递问题

讨论 未结 2 38
lon91ong
lon91ong 会员 2022年4月25日 09:19 发表
<p>测试源代码如下:</p> <pre><code># -*- coding: utf-8 -*- from os import path from time import sleep from winsystray import SysTrayIcon from winsystray.win32_adapter import NIIF_USER, NIIF_LARGE_ICON, MFS_DISABLED app_root = path.dirname(path.realpath(__file__)) def on_right_click(systray): build_menu(systray) systray._show_menu() def on_quit(systray): global running running = False def on_select(systray): ''' 这里怎么知道点击的是哪个菜单呢? ''' def build_menu(systray): global last_main_menu, labs #print(labs.values()) main_menu = [] for k in labs.keys(): main_menu.append((k, 'pass', MFS_DISABLED)) for j in labs[k]: main_menu.append((' '+j['Name'], on_select)) # 这里的响应函数怎么传参数呢? main_menu.append((None, '-')) main_menu.append((None, '-')) main_menu = tuple(main_menu) if main_menu != last_main_menu: systray.update(menu=main_menu) last_main_menu = main_menu def balloons_info(text, title='通知'): my_tray.show_balloon(text, title, NIIF_USER | NIIF_LARGE_ICON) last_main_menu = None labs={'Sort 1':[{'Name':'Jack', 'Args':'8866'},{'Name':'Bob', 'Args':'9900'}],'Sort 2':[{'Name':'Jams', 'Args':'8686'},{'Name':'John', 'Args':'9090'}]} quit_item = '退出', on_quit icon_pth = path.join(app_root, 'favicon.ico') my_tray = SysTrayIcon(icon_pth, '测试响应', None, quit_item, left_click=None, right_click=on_right_click) my_tray.start() sleep(0.1) balloons_info('响应测试已经启动。\n\n 右键选择菜单') running = True while running: sleep(2) </code></pre> <p>效果如图所示</p> <p><img alt="效果图" class="embedded_image" loading="lazy" referrerpolicy="no-referrer" rel="noreferrer" src="https://gitee.com/sobweb/FreeD/raw/master/imgs/Snipaste_2022-04-25_16-39-09.png"></p> <p>###问题是</p> <p>响应函数如何接收参数呢? 或者 响应函数怎么知道点击的是哪个菜单呢?</p> <p>引用的库 winsystray<a href="https://github.com/SeaHOH/GotoX/discussions/228" rel="nofollow">参见</a></p>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
2个回复
  • imn1
    2022年4月25日 09:19
    不熟悉 winsystray 包的人,应该很难准确回答,还需要你自行确认用法 单纯看 git issue 的话,main_menu.append 第二个参数是 callabled ,传一个 function 过去? 是这样的话,你可以使用 functools.partial 定义一个指定参数的 function 作为传递 on_select 添加这个参数名称则可 如 def on_select( ..., item): ... for ... func = functools.partial(on_select, item=某个 id) main_menu.append( (..., func))
    0 0
  • lon91ong
    2022年4月25日 11:17
    问题完美解决, 但是有点不太明白原理, [问题详情]( ) 问题还原: ``` main_menu.append((' '+j['Name'],lambda x: subOpen(SomeWeb_app+' '+j['Args']))) ``` 问题解决: ``` main_menu.append((' '+j['Name'],lambda x, arg=j['Args']: subOpen(SomeWeb_app+' '+arg))) ``` 模糊理解, 不太明白, 希望大侠释疑
    0 0