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 - 带有彩色按钮和“错误”作为按钮文本的弹出窗口

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

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

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

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

弹出窗口

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

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

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

类型 范围 描述
任何 *参数 要在弹出窗口中显示的值
斯特 标题 窗口的可选标题。
(str, str) 或无 按钮颜色 显示按钮的颜色(文本颜色、按钮颜色)
斯特 背景颜色 窗口的背景颜色
斯特 文字颜色 文字颜色
布尔 自动关闭 如果为 True 窗口将自动关闭
INT 自动关闭持续时间 自动关闭窗口之前保持窗口打开的时间(以秒为单位)
布尔 非阻塞 如果为 True,则将立即从函数返回,而不等待用户的输入。
元组[字体名称、大小、修饰符] 字体 指定字体系列、大小等。元组或单字符串格式“名称大小样式”。
布尔 随处抓取 如果 True 可以抓取任意位置来移动窗口。
(整数,整数) 地点 屏幕上显示窗口左上角的位置。默认窗口位于屏幕中央
布尔 保持在最前 如果为 True,窗口将保持在所有当前窗口之上
布尔 莫代尔 如果为 True,则使弹出窗口的Behave类似于模态窗口。默认=真

滚动弹出窗口

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

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

在以下示例中,一个大文件 zen.txt 显示在带有可滚动文本框的弹出窗口中。该文件包含被称为“Python Zen”的 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”是一个弹出窗口,显示正在进行的长流程(例如循环)的可视化表示。它显示某个参数的瞬时值、完成该过程的估计时间以及经过的时间。

在以下示例中,逐字符读取文本文件。进度表以进度条的形式显示进程的进度、完成所需的预计时间以及计数的瞬时值。

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(阶乘)值。这是由打印功能完成并显示在调试窗口中。

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,调试窗口将显示以下输出-

调试窗口