PySimpleGUI与PySimpleGUIQt菜单行为差异及适配方案咨询
PySimpleGUI多后端菜单兼容方案
不需要分别开发两个版本,通过动态判断当前运行后端+针对性配置样式的方式,一份代码即可同时兼容tkinter和Qt后端。
适配实现方案
方案1:后端分支适配(推荐,开发量最小)
利用PySimpleGUI内置的sg.backend属性判断当前运行的后端,分别传递对应参数;Qt后端通过获取底层Qt组件设置样式表,实现和tk后端一致的美观效果,示例代码如下:
import PySimpleGUI as sg sg.theme('LightGreen5') menu_def = [['&File', ['&Open', 'C&lose']]] # 动态构造不同后端的菜单参数 menu_kwargs = {} if sg.backend == 'tkinter': menu_kwargs.update({ 'background_color': 'white', 'text_color': 'black', 'font': ('Arial', 10) }) layout = [ [sg.Menu(menu_def, **menu_kwargs)], # 此处添加你自己的其他布局组件 [sg.Text('功能测试区域')] ] window = sg.Window('多后端兼容窗口', layout) # Qt后端单独配置菜单样式 if sg.backend == 'Qt': # 获取底层Qt菜单栏对象 qt_menu_bar = window['MENU'].Widget # 用Qt样式表配置和tk端一致的效果,可自行调整参数 qt_menu_bar.setStyleSheet(""" QMenuBar { background-color: white; color: black; font-family: Arial; font-size: 10pt; } QMenuBar::item { background: transparent; padding: 4px 12px; } QMenuBar::item:selected { background-color: #e0e0e0; } QMenu { background-color: white; color: black; font-family: Arial; font-size: 10pt; border: 1px solid #cccccc; } QMenu::item { padding: 4px 24px; } QMenu::item:selected { background-color: #a8d89a; } """) # 事件循环 while True: event, values = window.read() if event in (sg.WIN_CLOSED, 'Close'): break window.close()
方案2:自定义模拟菜单(全后端样式100%一致)
如果需要所有后端的菜单表现完全无差异,可以放弃内置sg.Menu组件,自行实现顶栏菜单:
- 顶栏用一排无边框
sg.Button模拟一级菜单选项 - 点击按钮时调用
sg.popup_menu弹出对应二级菜单 - 所有样式完全自主控制,不受不同后端原生组件的差异限制
内容的提问来源于stack exchange,提问作者Fausto Arinos Barbuto
相关产品推荐
相关产品推荐

