PySimpleGUI - Popup 弹出窗口

PySimpleGUI 模块中以前缀 popup* 开头的函数会生成具有预定义外观的窗口。 弹出功能的名称表明其上显示的按钮的用途和配置。 这些弹出窗口仅用一行代码创建。 每个弹出窗口都有特定的用途,然后立即关闭。

最基本的弹出窗口是由 popup() 函数创建的。 它可以像 print() 函数一样使用,在窗口上显示多个参数,以及一个 OK 按钮。 它就像一个消息框,在按下 OK 按钮后立即消失

>>> import PySimpleGUI as psg
>>> psg.popup("Hello World")

它显示一个带有 Hello World 文本和 OK 按钮的弹出窗口。 请注意,可以显示多个字符串。 以下弹出窗口具有不同的按钮配置可用 −

  • popup_ok − 仅显示带有 OK 按钮的 Popup

  • popup_ok_cancel − 显示带有 OK 和 Cancel 按钮的弹出窗口

  • popup_cancel − 显示带有"cancelled"已取消按钮文本的弹出窗口

  • popup_yes_no − 显示带有 Yes 和 No 按钮的弹出窗口

  • popup_error − 带有彩色按钮和"Error"错误作为按钮文本的弹出窗口

这些函数返回用户按下的按钮的文本。 例如,如果用户按下 ok-cancel 弹出窗口的 OK 按钮,它会返回 Ok,这可以在进一步的编程逻辑中使用。

以下弹出窗口接受用户以文本形式输入或让用户从选择器中选择文件/文件夹/日期。

  • popup_get_text − 显示带有文本输入字段的弹出窗口。 返回输入的文本,如果关闭/取消则返回 None

  • popup_get_file − 显示带有文本输入字段和浏览按钮的弹出窗口,以便用户可以选择文件。

  • popup_get_folder − 显示带有文本输入字段和浏览按钮的弹出窗口,以便可以选择文件夹。

  • popup_get_date − 显示一个日历窗口,获取用户的选择,以元组形式返回(mon, day, year)

当用户做出选择并按下 Ok 确定按钮时,弹出窗口的返回值是文本,可以在程序中进一步使用。

以下脚本显示了上述一些弹出窗口的使用 −

import PySimpleGUI as psg
text = psg.popup_get_text('Enter your name', title="Textbox")
print ("You entered: ", text)
file=psg.popup_get_file('Select a file',  title="File selector")
print ("File selected", file)
folder=psg.popup_get_folder('Get folder', title="Folder selector")
print ("Folder selected",folder)
ch = psg.popup_yes_no("Do you want to Continue?",  title="YesNo")
print ("You clicked", ch)
ch = psg.popup_ok_cancel("Press Ok to proceed", "Press cancel to stop",  title="OkCancel")
if ch=="OK":
   print ("You pressed OK")
if ch=="Cancel":
   print ("You pressed Cancel")
psg.popup_no_buttons('You pressed', ch, non_blocking=True)
psg.popup_auto_close('This window will Autoclose')

输出 − 上面代码生成的弹窗如下图 −

弹出窗口

以下输出显示在 Python console 控制台 −

You entered: Tutorialspoint
File selected F:/python36/hello.png
Folder selected F:/python36/Scripts
You clicked Yes
You pressed Cancel

所有类型的弹出窗口都是从弹出类继承的各个类的对象。 它们都有一组共同的属性。 这些属性具有一定的默认值,可用于自定义弹出对象的外观和行为。 下表为常用参数 −

类型 参数 说明
Any *args 要在弹出窗口中显示的值
Str title 窗口的可选标题。
(str, str) 或 None button_color 显示按钮的颜色(文本颜色、按钮颜色)
Str background_color 窗口背景色
Str text_color 文字颜色
Bool auto_close 如果为True,窗口将自动关闭
Int auto_close_duration 在自动关闭窗口之前保持窗口打开的时间(以秒为单位)
Bool non_blocking 如果为 True 则将立即从函数返回,而无需等待用户输入。
Tuple[font_name, size, modifiers] font 指定字体系列、大小等。元组或单个字符串格式"名称大小样式"。
Bool grab_anywhere 如果为 True 则可以抓取任意位置移动窗口。
(int, int) Location 在屏幕上显示窗口左上角的位置。 默认为屏幕居中的窗口
Bool keep_on_top 如果为 True,窗口将保持在所有当前窗口之上
Bool modal 如果为 True,则弹出窗口的行为类似于模态窗口。 默认 = True

滚动的弹出窗口

popup_scrolled() 函数生成一个带有可滚动文本框的弹出窗口。 使用它来显示大量文本,由许多字符数超过宽度的行组成。

size 属性是一个元组 (w, h),其中"w"是一行中的字符数,"h"是一次显示的行数。 如果字符数/文本行数超过"w"或"h",文本框的水平/垂直滚动条将变为活动状态。

在下面的示例中,一个大文件 zen.txt 显示在带有可滚动文本框的弹出窗口中。 该文件包含 Python 的设计原则,称为"Python 之禅"。

import PySimpleGUI as psg
file=open("zen.txt")
text=file.read()
psg.popup_scrolled(text, title="Scrolled Popup", font=("Arial Bold", 16), size=(50,10))

它将产生以下输出

滚动弹出窗口

进度指示器

"one_line_progress_meter"是一个弹出窗口,显示正在进行的长过程的可视化表示,例如循环。 它显示了某个参数的瞬时值、完成该过程的估计时间和经过的时间。

在下面的例子中,一个文本文件被逐个字符地读取。 Progress meter 以进度条的形式显示进程的进度、完成所需的估计时间以及计数的瞬时值。

import PySimpleGUI as psg
import os
size = os.path.getsize('zen.txt')
file=open("zen.txt")
i=0
while True:
   text=file.read(1)
   i=i+1
   if text=="":
      file.close()
      break
   print (text,end='')
   psg.one_line_progress_meter(
      'Progress Meter', i, size,
      'Character Counter'
   )

它将产生以下输出窗口 −

进度表

调试弹出窗口

在程序执行期间,通常需要跟踪某些变量的中间值,尽管在以下输出中不需要。 这可以通过 PySimpleGUI 库中的 Print() 函数来实现。

注意 − 与 Python 的内置 print() 函数不同,此函数的"P"为大写)。

当程序第一次遇到这个函数时,会出现调试窗口,所有后续的打印都在其中回显。 此外,我们可以使用EasyPrinteprint也有同样的效果。

以下程序计算用户输入的数字的阶乘值。 在 for 循环中,我们希望在每次迭代中跟踪 f(对于阶乘)的值。 这是由 Print 函数完成的,并显示在调试窗口中。

import PySimpleGUI as psg
f=1
num=int(psg.popup_get_text("enter a number: "))
for x in range(1, num+1):
   f=f*x
   psg.Print (f,x)
print ("factorial of {} = {}".format(x,f))

假设用户输入 5,调试窗口显示以下输出

Debug 调试窗口