PySimpleGUI Hello World
使用PySimpleGUI的第一个窗口
要检查PySimpleGUI及其依赖项是否正确安装,请使用任何支持Python的编辑器,输入以下代码并保存为 “hello.py”。
import PySimpleGUI as psg
layout = [[psg.Text(text='Hello World',
font=('Arial Bold', 20),
size=20,
expand_x=True,
justification='center')],
]
window = psg.Window('HelloWorld', layout, size=(715,250))
while True:
event, values = window.read()
print(event, values)
if event in (None, 'Exit'):
break
window.close()
上面的代码构造了一个带有Text元素(相当于TKinter中的Label)的窗口,并在窗口的中心位置显示 “Hello World “信息。
Run this program from the command terminal as −
Python hello.py
程序产生的 输出 应该与下面显示的类似 —
等价的Tkinter代码
要想用纯Tkinter代码获得类似的输出,我们需要下面的Python脚本 —
from tkinter import *
window=Tk()
lbl=Label(window, text="Hello World",
fg='white', bg='#64778D',
font=("Arial Bold", 20))
lbl.place(x=300, y=15)
window.title('HelloWorld Tk')
window['bg']='#64778D'
window.geometry("715x250+10+10")
window.mainloop()
除了使用 waitress 模块的 serve() 函数来启动WSGI服务器外,其他功能都没有变化。在运行程序后访问浏览器中的’/’路线时,Hello World消息会像以前一样显示。
可调用类可以代替函数,也可以作为视图使用。一个可调用的类是重写了 __call__() 方法的一类。
from pyramid.response import Response
class MyView(object):
def __init__(self, request):
self.request = request
def __call__(self):
return Response('hello world')
PySimpleGUIQt
PySimpleGUI API的对象模型已经与PySide2包(它是Qt图形工具包的Python移植)中定义的部件兼容。PySimpleGui的Qt版本被称为PySimpleGUIQt。它也可以通过以下PIP命令来安装
pip3 install PySimpleGUIQt
因为这个包依赖于PySide2,所以也将安装同样的包。
>>> import PySide2
>>> PySide2.__version__
'5.15.2.1'
>>> import PySimpleGUIQt
>>> PySimpleGUIQt.version
'0.35.0 Released 6-Jun-2020'
如前所述,PySimpleGui项目最重要的特点是为一个软件包编写的代码与其他软件包完全兼容。因此,前面使用的hello.py程序可以像Qt版本那样使用。唯一需要改变的是导入PySimpleGUIQt而不是PySimpleGui。
import PySimpleGUIQt as psg
layout = [[psg.Text(text='Hello World',
font=('Arial Bold', 20),
justification='center')],
]
window = psg.Window('HelloWorldQt', layout, size=(715,250))
while True:
event, values = window.read()
print(event, values)
if event in (None, 'Exit'):
break
window.close()
输出 相当类似。
等价的PySide2代码
实现相同结果的纯PySide2代码如下-
import sys
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
def window():
app = QApplication(sys.argv)
w = QWidget()
w.setStyleSheet("background-color: #64778D;")
b = QLabel(w)
b.setText("Hello World!")
b.setFont(QFont('Arial Bold', 20))
b.setAlignment(Qt.AlignCenter)
b.setStyleSheet("color: white;")
b.setGeometry(100, 100, 715, 250)
b.move(50, 20)
w.setWindowTitle("HelloWorldQt")
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
它将产生相同的输出窗口。
PySimpleGUIWx
这个模块封装了WxPython工具箱中定义的GUI部件的功能。WxPython是广泛使用的WxWidgets库的一个Python移植,该库最初是用C++编写的。很明显,PySimpleGUIWx依赖于WxPython包,因此后者将通过以下PIP命令自动安装
pip3 install PySimpleGUIWx
为了确认PySimpleGUIWx和WxPython都已正确安装,在Python终端输入以下语句。
>>> import PySimpleGUIWx
>>> PySimpleGUIWx.version
'0.17.1 Released 7-Jun-2020'
>>> import wx
>>> wx.__version__
'4.0.7'
在 “hello.py “脚本中不需要太多的改动。我们只需要在 “import “语句中用PySimpleGUIWx模块替换PySimpleGUI。
import PySimpleGUIWx as psg
layout = [[psg.Text(text='Hello World',
font=('Arial Bold', 20),
size=(500, 5),
justification='center')],
]
window = psg.Window('HelloWorldWx', layout, size=(715, 250))
while True:
event, values = window.read()
print(event, values)
if event in (None, 'Exit'):
break
window.close()
它将产生以下 输出
请注意,使用下面的纯WxPython代码,您将需要更复杂的代码来获得类似的输出 −
import wx
app = wx.App()
window = wx.Frame(None, title="WxPython", size=(715, 250))
panel = wx.Panel(window)
panel.SetBackgroundColour((100, 119, 141))
label = wx.StaticText(panel, -1, style=wx.ALIGN_CENTER)
label.SetLabel("Hello World")
label.SetForegroundColour((255, 255, 255))
font = wx.Font()
font.SetFaceName("Arial Bold")
font.SetPointSize(30)
label.SetFont(font)
window.Show(True)
app.MainLoop()
它将显示一个顶层窗口,上面有一个以Hello World为标题的文本标签。
PySimpleGUIWeb
Remi(REMote Interface)是一个用于在网络浏览器中渲染的Python应用程序的GUI库。PySimpleGUIWeb软件包将原来的PySimpleGui库移植到Remi中,这样它的应用程序就可以在浏览器中运行。下面的PIP命令将PySimpleGUIWeb和Remi同时安装在当前的Python环境中 –
pip3 install PySimpleGUIWeb
在编写应用程序之前,请检查它们是否正确安装。
>>> import PySimpleGUIWeb
>>> PySimpleGUIWeb.version
'0.39.0 Released 6-Jun-2020'
以下脚本是原始Hello World程序的PySimpleGUIWeb版本。
import PySimpleGUIWeb as psg
layout = [[psg.Text(text='Hello World',
font=('Arial Bold', 20),
justification='center')]]
window = psg.Window('HelloWorldWeb', layout)
while True:
event, values = window.read()
print(event, values)
if event in (None, 'Exit'):
break
window.close()
使用纯Remi库的功能获得类似的输出有点复杂,如下代码所示。
import remi.gui as gui
from remi import start, App
class HelloWeb(App):
def __init__(self, *args):
super(HelloWeb, self).__init__(*args)
def main(self):
wid = gui.VBox(style={"background-color": "#64778D"})
self.lbl = gui.Label('Hello World', width='100%', height='100%',
style={ "color":"white",
"text-align": "center",
"font-family": "Arial Bold",
"font-size": "20px"}
)
wid.append(self.lbl)
return wid
if __name__ == "__main__":
start(HelloWeb, debug=True, address='0.0.0.0', port=0)
当我们运行这些程序时,Remi服务器启动,一个浏览器窗口自动打开,并显示Hello World信息。
这里我们看到了用PySimpleGUI、PySimpleGUIQt、PySimpleGUIWx和PySimpleGUIWeb库编写的Hello World程序。我们可以看到,widget库仍然是一样的。此外,同样的Hello World程序,当分别用纯Tkinter、PySide、WxPython和Remi编写时,变得比PySimpleGUI版本复杂和繁琐得多。