PySimpleGUI是一个Python GUI,它封装了其他的Python GUI东西箱(Tkinter, PySide, wxPython)。经过将其他GUI的复杂性笼统成一个通用的API,你能够快速地编写代码,只需在你的程序顶部改动导入,就能够运用任何其他东西包进行渲染。

如果你要运用wxPython,并且你想布局你的小部件,你会运用wx.Sizer。在PySide或PyQt中,你会运用Layout对象。Tkinter运用几许管理器。一般的概念都是相同的。当你运用这些东西时,GUI东西包运用小部件的相对定位来组织它们在屏幕上。

在PySimpleGUI中,相同的工作是运用嵌套列表来完结的。在本教程中,你将会看到几个不同的比如,这些比如会让你对这一切怎么运作有一个大致的了解。

创立一个水平布局

创立一系列水平方向(从左到右)的元素是经过 PySimpleGUI 中的一个小列表完结的。

Mike Driscoll: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 创立一个笔直方向的布局,你需要使布局包括一系列的嵌套列表,每个列表中都包括一个或多个元素。

Mike Driscoll: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元素。它是一种容器元素的类型,专门为创立堆叠的元素集而制作的

Mike Driscoll:PySimpleGUI - 铺设元素的介绍

创立另一个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.