Pysimplegui 简明教程

PySimpleGUI - Popup Windows

PySimpleGUI 模块中以弹出窗口*前缀开头的函数会生成具有预定义外观的窗口。弹出窗口函数的名称表示其目的是否在其中提供按钮的配置。这些弹出窗口仅使用一行代码创建。每个弹出窗口都有特定的目的,然后立即关闭。

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

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

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

  1. popup_ok − 仅显示带有“确定”按钮的弹出窗口

  2. popup_ok_cancel − 显示带有“确定”和“取消”按钮的弹出窗口

  3. popup_cancel − 显示带有“取消”按钮文本的弹出窗口

  4. popup_yes_no − 显示带有“是”和“否”按钮的弹出窗口

  5. popup_error − 弹出带有彩色按钮和“错误”作为按钮文本的窗口

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

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

  1. popup_get_text − 显示具有文本输入字段的弹出窗口。返回输入的文本,或者如果已关闭/取消,则返回 None

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

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

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

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

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

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

Output − 下面显示了上述代码生成的弹出窗口 −

pop windows

Python console 上显示以下 output

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

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

Type

Parameter

Description

Any

*args

要在弹出窗口上显示的值

Str

title

窗口的可选标题。

(str, str) or None

button_color

显示的按钮颜色(文本颜色、按钮颜色)

Str

background_color

Window’s background color

Str

text_color

text color

Bool

auto_close

如果为 True,则窗口将自动关闭

Int

auto_close_duration

在自动关闭窗口之前保持窗口处于打开状态的时间(以秒为单位)

Bool

non_blocking

如果为 True,则将立即从函数返回,而无需等待用户输入。

Tuple[font_name, size, modifiers]

font

指定字体系列、大小等。元组或单字符串格式 'name size styles'。

Bool

grab_anywhere

如果为 True,则可以在任何地方点击以移动窗口。

(int, int)

Location

显示窗口的左上角在屏幕上的位置。默认为窗口在屏幕上居中

Bool

keep_on_top

如果为 True,窗口将保持在所有当前窗口之上

Bool

modal

如果为 True,则弹出窗口将表现得像模式窗口。默认 = True

Scrolled Popup

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

它将生成以下 output

scrolled popup

Progress Meter

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

它将生成以下 output 窗口 −

progress meter

Debug Popup

在程序运行期间,通常需要跟踪某些变量的中间值,虽然后续的输出中不需要这些值。可以使用 PySimpleGUI 库中的 Print() 函数来实现此目的。

Note − 与 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,调试窗口会显示以下 output

debug window