PySimpleGUI是一个Python GUI,它封装了其他的Python GUI东西箱(Tkinter, PySide, wxPython)。经过将其他GUI的复杂性笼统成一个通用的API,你能够快速地编写代码,只需在你的程序顶部改动导入,就能够运用任何其他东西包进行渲染。
如果你要运用wxPython,并且你想布局你的小部件,你会运用wx.Sizer。在PySide或PyQt中,你会运用Layout对象。Tkinter运用几许管理器。一般的概念都是相同的。当你运用这些东西时,GUI东西包运用小部件的相对定位来组织它们在屏幕上。
在PySimpleGUI中,相同的工作是运用嵌套列表来完结的。在本教程中,你将会看到几个不同的比如,这些比如会让你对这一切怎么运作有一个大致的了解。
创立一个水平布局
创立一系列水平方向(从左到右)的元素是经过 PySimpleGUI 中的一个小列表完结的。
翻开一个Python编辑器,增加以下代码。
import PySimpleGUI as sg
# Horizontal layout
layout = [[sg.Button(f"OK {num}") for num in range(1, 6)]]
# Create the window
window = sg.Window("Demo", layout)
# Create an event loop
while True:
event, values = window.read()
# End program if user closes window or
# presses the OK button
if event == "OK" or event == sg.WIN_CLOSED:
break
window.close()
这儿你用Python的列表理解来创立一个嵌套的列表,其间包括五个Button对象。当你运行这段代码时,你会看到按钮是水平排列的,一个挨着一个,从左到右。
现在你现已准备好了,看看怎么重写代码来创立一个笔直的布局
创立一个笔直的布局
为了用 PySimpleGUI 创立一个笔直方向的布局,你需要使布局包括一系列的嵌套列表,每个列表中都包括一个或多个元素。
创立一个新的 Python 文件,并在其间增加这段代码。
import PySimpleGUI as sg
layout = [[sg.Button("OK")],
[sg.Button("OK 2")],
[sg.Button("OK 3")],
[sg.Button("OK 4")],
[sg.Button("OK 5")]]
# Create the window
window = sg.Window("Demo", layout)
# Create an event loop
while True:
event, values = window.read()
# End program if user closes window or
# presses the OK button
if event == "OK" or event == sg.WIN_CLOSED:
break
window.close()
当你运行这段代码时,Button Elements将从上到下笔直堆叠,而不是水平堆叠。
为复杂的布局运用列
如果你需要在PySimpleGUI中增加两列或多列相邻的元素,你能够运用sg.Column元素。它是一种容器元素的类型,专门为创立堆叠的元素集而制作的
创立另一个Python文件并增加以下代码。
import PySimpleGUI as sg
import os.path
# First the window layout in 2 columns
file_list_column = [
[sg.Text("Image Folder"),
sg.In(size=(25, 1), enable_events=True, key="-FOLDER-"),
sg.FolderBrowse(),],
[sg.Listbox(values=[], enable_events=True, size=(40, 20), key="-FILE LIST-")],
]
# For now will only show the name of the file that was chosen
image_viewer_column = [
[sg.Text("Choose an image from list on left:")],
[sg.Text(size=(40, 1), key="-TEXT-")],
[sg.Image(key="-IMAGE-")],
]
# ----- Full layout -----
layout = [
[sg.Column(file_list_column),
sg.VSeperator(),
sg.Column(image_viewer_column),]
]
window = sg.Window("Column Demo", layout)
# Run the Event Loop
while True:
event, values = window.read()
if event == "Exit" or event == sg.WIN_CLOSED:
break
# Folder name was filled in, make a list of files in the folder
if event == "-FOLDER-":
folder = values["-FOLDER-"]
try:
# Get list of files in folder
file_list = os.listdir(folder)
except:
file_list = []
fnames = [
f
for f in file_list
if os.path.isfile(os.path.join(folder, f))
and f.lower().endswith((".png", ".gif"))
]
window["-FILE LIST-"].update(fnames)
elif event == "-FILE LIST-": # A file was chosen from the listbox
try:
filename = os.path.join(values["-FOLDER-"], values["-FILE LIST-"][0])
window["-TEXT-"].update(filename)
window["-IMAGE-"].update(filename=filename)
except:
pass
window.close()
在这个比如中,你创立了两个布局!第一个布局被称为file_list_column ,其间包括四个元素。第二个布局被称为image_viewer_column ,包括三个元素。然后你把这些布局放在列里面,而这些列自身又在一个布局里面。正如你所看到的,PySimpleGUI的布局是列表中的列表,一直以来都是如此。
总结
PySimpleGUI经过运用Python列表消除了创立布局的一些复杂性。PyQt / PySide 和 wxPython GUI 东西包运用面向对象的方法,包括很多的模板和标志来做相同的工作。他们都有自己的权衡,但由于他们的设计选择,PySimpleGUI的学习曲线要陡峭得多。
相关阅读
-
PySimpleGUI。将图像作为按钮运用
-
淘宝网上的 “淘宝客 “是什么?
-
开始介绍一下PySimpleGUI
-
PySimpleGUI的演示
The postPySimpleGUI – An Intro to Laying Out Elementsappeared first onMouse Vs Python.