PySimpleGUI - Button 按钮元素

几乎每个 GUI 窗口都会有至少一个按钮。 单击按钮元素时,它会启动特定操作。 PySimpleGUI 有一些带有预定义标题的按钮类型。 它们被定义为执行特定任务。 带有用户定义标题的其他人能够执行任何所需的任务。

带有预定义标题的按钮有一个快捷名称。 这样可以通过两种方式创建带有 OK 作为标题的按钮 −

>>> b1=psg.Button("OK")
# OR
>>> b1=psg.OK()

其他此类预定义的说明文字是 −

  • OK

  • Ok

  • Submit

  • Cancel

  • Yes

  • No

  • Exit

  • Quit

  • Help

  • Save

  • SaveAs

  • Open

在 PySimpleGUI 中,默认情况下会自动启用按钮事件。 单击时,这些预定义的标题将成为生成的事件的名称。

PysimpleGUI 中有一些选择器按钮。 单击这些按钮时,会打开一个对话框让用户从中进行选择。

  • FileBrowse

  • FilesBrowse

  • FileSaveAs

  • FolderBrowse

  • CalendarButton

  • ColorChooserButton

这些特殊按钮返回所选对象的字符串表示形式,并且该值填充到窗口上的任何其他元素(例如 Input 或 Multiline)中。 该元素由 target 属性指向。

目标属性的值使用 (row, col) 元组表示。 默认目标是位于该按钮左侧的同一行中的元素,由 (ThisRow, -1) 值表示。 ThisRow 表示同一行,"-1"表示按钮紧靠左侧的元素。 如果 target 的值设置为 (None, None),则按钮本身将保存信息。 可以使用按钮的键访问该值。

目标属性也可以是目标元素的关键属性。


文件浏览

FileBrowse 文件浏览按钮打开一个文件对话框,可以从中选择单个文件。 在下面的代码中,所选文件的路径字符串显示在同一行的目标输入框中。

import PySimpleGUI as psg
layout = [
   [psg.Text('Select a file',font=('Arial Bold', 20), expand_x=True, justification='center')],
   [psg.Input(enable_events=True, key='-IN-',font=('Arial Bold', 12),expand_x=True), psg.FileBrowse()]
]
window = psg.Window('FileChooser Demo', layout,
size=(715,100))
while True:
   event, values = window.read()
   if event == psg.WIN_CLOSED or event == 'Exit':
      break
window.close()

此代码呈现以下窗口 −

文件浏览

单击"浏览"按钮以显示文件对话框

文件对话框

选定的文件名及其路径显示在输入框中。

文件浏览

文件浏览

FilesBrowse 该元素允许用户选择多个文件。 返回字符串是文件的串联,以";"分隔 特点。 我们将通过以下代码用所选文件填充列表框。

import PySimpleGUI as psg
layout = [[psg.Text('Select a file', font=('Arial Bold', 20), expand_x=True, justification='center')],
   [psg.LBox([], size=(20, 10), expand_x=True,
   expand_y=True, key='-LIST-'),
   psg.Input(visible=False, enable_events=True, key='-IN-', font=('Arial Bold', 10), expand_x=True), psg.FilesBrowse()]
 ]
window = psg.Window('FileChooser Demo', layout, size=(715, 200))
while True:
   event, values = window.read()
   if event == '-IN-':
      window['-LIST-'].Update(values['-IN-'].split(';'))
   if event == psg.WIN_CLOSED or event == 'Exit':
      break
window.close()

此处,通过将"visible"属性设置为 False,隐藏带有"-IN-"键的 Input 元素。 尽管如此,它仍包含所选文件的 ";" 分隔列表。 该字符串在出现 ";" 字符时被拆分,下面的列表是包含文件名的文件。

文件浏览

文件夹浏览

FolderBrowse 此元素的工作方式类似于 FileBrowse 元素。 用于选择当前文件夹。 它可用于将所选文件夹设置为后续文件相关操作的默认文件夹。

您可以将此元素的"initial_folder"属性设置为文件夹名称(连同其路径)以打开文件夹对话框,并首先打开该文件夹。

import PySimpleGUI as psg
layout = [
   [psg.Text('Select a folder', font=('Arial Bold', 20),
   expand_x=True, justification='center')],
   [psg.Input(enable_events=True, key='-IN-',
   font=('Arial Bold', 12), expand_x=True),
   psg.FolderBrowse(initial_folder="c:/Python310")]
]
window = psg.Window('FolderChooser Demo', layout, size=(715,100))
while True:
   event, values = window.read()
   if event == psg.WIN_CLOSED or event == 'Exit':
      break
window.close()

显示带有浏览按钮的窗口。

文件夹文件

文件夹对话框在被点击时打开。

文件夹对话框

所选文件夹的路径显示在输入文本字段中。

文件夹显示

文件另存为

FileSaveAs 此按钮还会打开一个文件对话框,但会提供一个保存按钮,这样 PySimpleGUI 窗口中的信息就可以按用户给定的名称进行保存。 SaveAs 对话框可以通过以下属性进行自定义。 我们可以对要选择的文件类型应用过滤器,并设置浏览操作的初始文件夹。

序号 属性 & 描述
1 file_types

默认值 = (("ALL Files", "*.* *"),)

2 default_extension

如果用户没有输入扩展名,将其添加到文件名

3 initial_folder

文件夹和文件的起始路径

在下面的示例中,文件浏览按钮允许您读取文件的内容并显示在多行文本框中。 单击 SaveAS 按钮将显示的文本另存为新文件名。

import PySimpleGUI as psg
t1 = psg.Input(visible=False, enable_events=True, key='-T1-', font=('Arial Bold', 10), expand_x=True)
t2 = psg.Input(visible=False, enable_events=True, key='-T2-', font=('Arial Bold', 10), expand_x=True)
t3 = psg.Multiline("", enable_events=True, key='-INPUT-',
 expand_x=True, expand_y=True, justification='left')
layout = [[t1, psg.FilesBrowse()], [t3], [t2, psg.FileSaveAs()]]
window = psg.Window('FileSaveAs Demo', layout, size=(715, 200))
while True:
   event, values = window.read()
   if event == '-T1-':
      file = open(t1.get())
      txt = file.read()
      window['-INPUT-'].Update(value=txt)
   if event == '-T2-':
      file = open(t2.get(), "w")
      file.write(t3.get())
      file.close()
   if event == psg.WIN_CLOSED or event == 'Exit':
      break
window.close()

选择一个文本文件。 其内容将显示在文本框中。

文件保存演示

选择名称和目标文件夹以将文本保存在新文件中。

文件另存为演示

颜色选择器按钮

ColorChooserButton 此按钮会弹出一个颜色对话框。 您可以从样本中选择一种颜色,或使用滑块,或从微调器中设置 RGB 值。 该对话框返回所选颜色的 RGB 值的十六进制字符串。 它显示在目标输入控件中,可以进一步用于更改任何元素的颜色相关属性。

在以下示例中,所选颜色用于更新显示 Hello World 字符串的文本元素的"text_color"属性。

import PySimpleGUI as psg
layout = [[psg.Text('Hello World', font=('Arial Bold', 20),
   expand_x=True, justification='center',
   key='-T1-')],
   [psg.Input(enable_events=True, key='-IN-',
   font=('Arial Bold', 12), expand_x=True),
   psg.ColorChooserButton("Choose Color")]
 ]
window = psg.Window('Color Chooser Demo', layout, size=(715, 100))
while True:
   event, values = window.read()
   print(event, values)
   if event == '-IN-':
      window['-T1-'].update(text_color=values['-IN-'])
   if event == psg.WIN_CLOSED or event == 'Exit':
      break
window.close()

出现一个带有 ColorChooserButton 和 Choose Color 标题的窗口。

文件颜色演示

单击按钮打开颜色对话框。

颜色选择器演示

选择所需的颜色并按 OK。 对应的十六进制字符串将返回并显示在目标 Input 元素中。 Input 元素的 get() 方法用于获取它并更新 Hello World 文本的 text_color 属性。

彩色显示演示

日历按钮

CalendarButton 此按钮显示日历选择器窗口。 目标元素填充有作为字符串的返回值。 CalendarButton 类中定义了以下重要属性 −

序号 属性 & 描述
1 button_text

按钮中的文字

2 default_date_m_d_y

要显示的开始日期

3 locale

定义用于获取日期名称的语言环境

4 month_names

要使用的月份名称的可选列表(应为 12 项)

5 day_abbreviations

显示为星期几的可选缩写列表

6 title

日期选择器窗口上显示的标题

这是一个简单的例子,演示如何使用 CalendarButton −

选择日期

它最初显示一个日历按钮。 单击它打开日历对话框 −

日历对话框

使用选择器箭头,选择所需的日期。 它将显示在窗口中。

日历显示

图片按钮

可以在按钮的表面显示图像而不是文本标题。 按钮类有一个"image_filename"属性。 分配要显示的图像的名称。 图像应为 PNG 或 GIF 类型。

Button 对象的"image_filename"属性可以设置为想要在按钮上显示的图像文件。

在下面的示例中,添加、减去和退出按钮有图像而不是标题。 为了捕获点击事件,使用了他们的 key 参数。

import PySimpleGUI as psg
layout = [
   [psg.Text('Enter a num: '), psg.Input(key='-FIRST-')],
   [psg.Text('Enter a num: '), psg.Input(key='-SECOND-')],
   [psg.Text('Result : '), psg.Text(key='-OUT-')],
   [psg.Button(key="Add", image_filename="plus.png"),
   psg.Button(key="Sub", image_filename="minus.png"),
   psg.Button(key="Exit", image_filename="close.png")],
]
window = psg.Window('Calculator', layout, size=(715, 200), enable_close_attempted_event=True)
while True:
   event, values = window.read()
   print(event, values)
   if event == "Add":
      result = int(values['-FIRST-']) + int(values['-SECOND-'])
   if event == "Sub":
      result = int(values['-FIRST-']) - int(values['-SECOND-'])
   window['-OUT-'].update(result)
   if event == psg.WIN_CLOSED or event == 'Exit':
      break
window.close()

下面是上面代码的结果

图像按钮

❮ PySimpleGUI 元素类