PySimpleGUI Menubar

PySimpleGUI Menubar

大多数的桌面应用程序都有一个菜单系统,根据用户对菜单中的选项的选择来触发不同的操作。在一个典型的应用程序窗口中,菜单栏被放置在标题栏的下面和窗口的客户端区域的上面。

菜单栏是一个由可点击按钮组成的水平条。当这些按钮中的任何一个被点击时,就会产生一个选项按钮的下拉列表。这样的选项按钮会触发一个点击事件,该事件可以在一个事件循环中处理。

菜单系统的设计就像窗口布局的指定一样。它也是一个列表的列表。每个列表有一个或多个字符串。第一层的列表的起始字符串是出现在水平菜单栏中的按钮的标题。它的后面是下拉菜单中的选项按钮的标题字符串的列表。这些选项的标题都在第一层列表里面的列表中。

你可以在一个选项按钮下有一个子菜单,在这种情况下,字幕被放在第三层列表中。同样地,字幕可以嵌套到任何级别。

菜单定义的一般格式如下。

menu_def = [
   ['Memu1', ['btn1', 'btn2', 'btn3', 'btn4',]],
   ['menu2', ['btn5', 'btn6','btn7', 'btn8'],],
]

为了将菜单系统附加到PysimpleGUI窗口的主布局上,将菜单对象放在布局的第一行。

菜单构造函数被赋予 menu_def 列表作为参数。主布局的其他行可以在有Menu对象的行之后给出。

layout= [[psg.Menu(menu_def),[..], [..]]

在下面的代码中,我们有一个带有文件、编辑和帮助菜单的菜单栏,每个菜单栏中都有一些菜单按钮。

import PySimpleGUI as psg
menu_def = [['File', ['New', 'Open', 'Save', 'Exit', ]], ['Edit', ['Cut', 'Copy', 'Paste', 'Undo'], ],  ['Help', 'About...'], ]
layout = [[psg.Menu(menu_def)],
   [psg.Multiline("", key='-IN-',
   expand_x=True, expand_y=True)],
   [psg.Multiline("", key='-OUT-',
   expand_x=True, expand_y=True)],
   [psg.Text("", key='-TXT-',
   expand_x=True, font=("Arial Bold", 14))]
]
window = psg.Window("Menu", layout, size=(715, 300))
while True:
   event, values = window.read()
   print(event, values)

   if event != psg.WIN_CLOSED:
      window['-TXT-'].update(values[0] + "Menu Button Clicked")
   if event == 'Copy':
      txt = window['-IN-'].get()
   if event == 'Paste':
      window['-OUT-'].update(value=txt)
   if event == psg.WIN_CLOSED:
      break
window.close()

在Menubar下面,放置了两个多行元素。最后一行有一个文本元素。

当任何菜单选项按钮被点击时,如此产生的事件是按钮的标题。这个标题会显示在最后一行的文本标签上。请参考下图–

PySimpleGUI - Menubar

当复制事件发生时,上面多行框中带有-INkey的文本被存储在一个txt变量中。之后,当粘贴按钮被按下时,-OUT-框中的文本会被更新为txt的值。

PySimpleGUI - Menubar

带热键的菜单按钮

要把一个菜单按钮和键盘上的一个键对应起来,在所需的字符前加一个安培符&。例如,在 “文件 “前加上”&”,这样,字符串就是”&文件”。这样一来,按 “Alf+F “键就可以访问文件菜单。这里的 “F “键被认为是一个热键。

在我们的菜单定义中为菜单按钮添加热键。

menu_def = [
   ['&File', ['&New', '&Open', '&Save', 'E&xit',]],
   ['&Edit', ['C&ut', '&Copy','&Paste', '&Undo'],],
   ['&Help', '&About...'],
]

当代码运行时,菜单中的热键会显示为下划线。

PySimpleGUI - Menubar

右键菜单

这个菜单是从应用程序窗口顶部的菜单栏中分离出来的。每当用户按下鼠标的右键,这个菜单就会在点击的同一位置弹出。

在上面定义的menubar中,每个列表都是一个单一菜单的定义。这种单一的菜单定义可以通过构造函数中的right_click_menu参数附加到任何元素上。这个参数也可以在构造主窗口对象时传递。

让我们用rightclick作为对应于编辑菜单的列表的变量。

rightclick=['&Edit', ['C&ut', '&Copy','&Paste', '&Undo']]
menu_def = [
   ['&File', ['&New', '&Open', '&Save', 'E&xit',]], rightclick,
   ['&Help', '&About...'],
]

使用它作为Window构造函数中right_click_menu参数的值。请看下面的片段 –

window=psg.Window("Menu", layout, size=(715, 300), right_click_menu=rightclick)

进行这些修改并运行代码。点击窗口中的任何地方。菜单弹出,如图所示–

PySimpleGUI - Menubar

按钮菜单

这个菜单与右键菜单类似,只是它与一个按钮相连,在点击按钮时弹出。

在主布局的最后一行,我们添加一个ButtonMenu元素,并使用右键列表作为其布局。

layout= [
   [psg.Menu(menu_def)],
   [psg.Multiline("", key='-IN-', expand_x=True, expand_y=True)],
   [psg.Multiline("", key='-OUT-', expand_x=True, expand_y=True)],
   [psg.Text("", key='-TXT-', expand_x=True, font=("Arial Bold", 14)),
   psg.ButtonMenu('ButtonMenu', rightclick, key='-BMENU-')]
]

当点击右下角的按钮时,菜单就会出现,如下图所示

PySimpleGUI - Menubar

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程