PySimpleGUI - 弹出窗口



PySimpleGUI 模块中以 `popup*` 为前缀的函数会生成具有预定义外观的窗口。弹出函数的名称指示其用途和其上存在的按钮的配置。这些弹出窗口只需一行代码即可创建。每个弹出窗口都有其特定的用途,并在使用后立即关闭。

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

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

它显示一个带有“Hello World”文本和“确定”按钮的弹出窗口。请注意,可以显示多个字符串。以下是一些具有不同按钮配置的弹出窗口:

  • popup_ok - 只显示带有“确定”按钮的弹出窗口

  • popup_ok_cancel - 显示带有“确定”和“取消”按钮的弹出窗口

  • popup_cancel - 显示带有“取消”按钮文本的弹出窗口

  • popup_yes_no - 显示带有“是”和“否”按钮的弹出窗口

  • popup_error - 带有彩色按钮且按钮文本为“错误”的弹出窗口

这些函数返回用户按下的按钮的文本。例如,如果用户按下确定取消弹出窗口的“确定”按钮,则它返回“确定”,这可以在进一步的编程逻辑中使用。

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

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

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

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

  • popup_get_date - 显示一个日历窗口,获取用户的选择,并返回一个元组 (月, 日, 年)

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

以下脚本显示了上述一些弹出的使用方法:

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')

输出 - 上述代码生成的弹出窗口如下所示:

Popup Windows

以下输出显示在 Python 控制台上:

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

所有类型的弹出窗口都是从弹出窗口类继承的相应类的对象。它们都具有一组通用的属性。这些属性具有特定的默认值,可用于自定义弹出窗口对象的外观和行为。下表列出了公共参数:

类型 参数 描述
任意 *args 要在弹出窗口上显示的值
字符串 title 窗口的可选标题。
(字符串, 字符串) 或 None button_color 显示的按钮的颜色 (文本颜色, 按钮颜色)
字符串 background_color 窗口的背景颜色
字符串 text_color 文本颜色
布尔值 auto_close 如果为 True,则窗口将自动关闭
整数 auto_close_duration 以秒为单位的时间,在自动关闭窗口之前保持窗口打开
布尔值 non_blocking 如果为 True,则将立即从函数返回,而无需等待用户的输入。
元组[字体名称, 大小, 修饰符] font 指定字体系列、大小等。元组或单字符串格式 '名称 大小 风格'
布尔值 grab_anywhere 如果为 True,则可以在任何地方抓取以移动窗口。
(整数, 整数) Location 屏幕上显示窗口左上角的位置。默认为窗口居中显示在屏幕上
布尔值 keep_on_top 如果为 True,则窗口将始终位于所有当前窗口之上
布尔值 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))

它将产生以下输出

Scrolled Popup

进度计

“one_line_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'
   )

它将产生以下输出窗口:

Progress Meter

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

调试弹出窗口

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

注意 - 与 Python 的内置 `print()` 函数不同,此函数中的“P”是大写的。

当程序第一次遇到此函数时,调试窗口将出现,所有后续的 Print 将在此窗口中显示。此外,我们还可以使用 `EasyPrint` 或 `eprint`,它们具有相同的效果。

以下程序计算用户输入数字的阶乘值。在 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 Window
广告