PySimpleGUI - Input 输入元素

Input 输入元素种类的小部件在任何 GUI 工具包中都是最受欢迎的。 Input 元素基于 TKinter 中的 Entry 小部件。 这个类的对象给出了一个单行的输入文本域。

除了通用属性外,Input元素特有的属性如下 −

序号 属性 & 描述
1 default_text

最初显示在输入框中的文本作为默认值

2 disabled

为元素设置禁用状态

3 use_readonly_for_disable

如果 True(默认)tkinter 状态设置为"只读"。 否则状态设置为"禁用"

4 password_char

如果这是一个密码字段,则为密码字符

Input 类定义了返回用户输入文本的 get() 方法。 update() 方法更改输入元素的一些设置。 定义了以下属性:

序号 属性 & 描述
1 value

在输入字段中显示为默认文本的新文本

2 disabled

元素的禁用或启用状态

3 select

如果为True,则文本将被选中

4 visible

改变元素的可见性

5 move_cursor_to

将光标移动到特定的偏移量。 默认为"end"

6 password_char

如果这是一个密码字段,则为密码字符

7 paste

如果为 True,则将值"粘贴"到元素中而不是替换整个元素。 如果选择了任何内容,它将被替换。 文本插入到当前光标位置。

在下面给出的示例中,窗口有一个 Input 元素来接受用户输入。 它被设计为只接受数字。 如果按下任何非数字键,则会弹出一条消息,通知您不允许这样做。 为此,将输入的最后一个字符与由数字字符组成的字符串进行比较。 如果最后按下的键不是数字,则将其从输入框中删除。

import PySimpleGUI as psg
l1 = psg.Text('Type here', key='-OUT-', font=('Arial Bold', 20), expand_x=True, justification='center')
t1 = psg.Input('', enable_events=True, key='-INPUT-', font=('Arial Bold', 20), expand_x=True, justification='left')
b1 = psg.Button('Ok', key='-OK-', font=('Arial Bold', 20))
b2 = psg.Button('Exit', font=('Arial Bold', 20))
layout = [[l1], [t1], [b1, b2]]
window = psg.Window('Input Demo', layout, size=(750, 150))
while True:
   event, values = window.read()
   print(event, values)
   if event == '-INPUT-':
      if values['-INPUT-'][-1] not in ('0123456789'):
         psg.popup("Only digits allowed")
         window['-INPUT-'].update(values['-INPUT-'][:-1])
   if event == psg.WIN_CLOSED or event == 'Exit':
      break
window.close()

它将产生以下输出窗口 −

Input 输入元素

多行元素

如果您希望输入包含多行的文本,您可以使用 Multiline 元素而不是 Input 元素。 事实上,它被用作输入和输出元素。 如果文本的长度大于输入/显示的文本的高度/宽度,则滚动条出现在元素中。

以下属性特定于多行元素 −

序号 属性 & 描述
1 default_text

要显示的初始文本

2 autoscroll

如果为 True,元素的内容将随着更多数据添加到末尾而自动滚动

3 auto_size_text

如果 True(默认)tkinter 状态设置为"只读"。 否则状态设置为"已禁用"

4 horizontal_scroll

控制是否应该显示水平滚动条。 如果为 True,除了垂直滚动条之外,还将显示水平滚动条

5 reroute_stdout

如果为True,那么所有到stdout的输出都会输出到这个元素

6 reroute_cprint

如果为 True,您的 cprint 调用将输出到此元素。

7 no_scrollbar

如果为 False,则显示垂直滚动条(默认)

与 Input 元素一样,Multiline 类也有一个 get() 方法来检索其文本内容。 Update() 方法更改此元素的某些属性的值。 例如 −

  • value − 要显示的新文本

  • append − 如果为 True,则新值将添加到当前值的末尾。 如果为 False,则内容将被替换。

在下面的例子中,多行文本框用于显示文本文件的内容 −

import PySimpleGUI as psg
file = open("zen.txt")
text = file.read()
l1 = psg.Text('Multiline Input/Output', font=('Arial Bold', 20), expand_x=True, justification='center')
t1 = psg.Multiline(text, enable_events=True, key='-INPUT-', expand_x=True, expand_y=True, justification='left')
b1 = psg.Button('Ok', key='-OK-', font=('Arial Bold', 20))
b2 = psg.Button('Exit', font=('Arial Bold', 20))
layout = [[l1], [t1], [b1, b2]]
window = psg.Window('Multiline Demo', layout, size=(715, 250))
while True:
   event, values = window.read()
   if event == psg.WIN_CLOSED or event == 'Exit':
      break
window.close()

程序会产生如下输出窗口 −

多行元素

❮ PySimpleGUI 元素类