今天给大家分享一个超强的 python 库,旨在轻松快速地创建简单的图形用户界面。
它构建在标准 Python GUI 工具包 tkinter 之上,但为创建 GUI?提供了更简单、更直观的界面。
它具有如下特点。
简单性
PySimpleGUI 通过简化的接口降低了创建 GUI 的复杂性。它允许开发者使用简洁的代码来创建窗口、按钮、文本框等常见的 GUI 元素。
支持多个 GUI 框架
虽然默认情况下 PySimpleGUI 使用 Tkinter 作为其后端,但它也支持其他 Python GUI 框架,如 Qt、WxPython 和 Web(通过 Remi)。这为开发者提供了灵活性,可以根据需要选择合适的后端。
灵活性
PySimpleGUI 与多个平台兼容,包括 Windows、Mac 和 Linux,并且支持 Python 2 和 Python 3。
自定义和样式
尽管 PySimpleGUI 专注于简化 GUI 创建过程,但它依然提供了足够的选项来自定义界面的外观和行为。
丰富的文档和示例
PySimpleGUI 拥有详细的文档和大量的示例代码,这极大地帮助了新用户的学习和使用。
总之,PySimpleGUI 是使用 Python 开发 GUI 应用程序的绝佳选择。它易于使用、灵活且功能强大,使其成为初学者和经验丰富的开发人员的理想选择。无论你想要创建一个简单的应用程序还是一个更复杂、功能丰富的程序,PySimpleGUI 都能满足你入门所需的一切。
可以直接使用 pip 进行安装。
pip?install?PySimpleGUI
在此示例中,我们创建一个简单的输入对话框,询问用户的姓名。你可以在输入字段中输入你的姓名,然后单击 “确定” 按钮以获得友好的问候。
import PySimpleGUI as sg
layout=[[sg.Text('Enter?your?name:'),sg.InputText()],[sg.Button('Ok'),sg.Button('Cancel')]]
window=sg.Window('My?Window',layout)
event,values=window.Read()
if event=='Ok':
sg.Popup('Hello'+values[0]+'!')
window.Close()
在此示例中,我们创建一个简单的计算器,可以对数字进行加、减、乘、除操作。
import PySimpleGUI as sg
layout=[[sg.InputText(key='input')],
[sg.Button('1'),sg.Button('2'),sg.Button('3'),sg.Button('+')],
[sg.Button('4'),sg.Button('5'),sg.Button('6'),sg.Button('-')],
[sg.Button('7'),sg.Button('8'),sg.Button('9'),sg.Button('*')],
[sg.Button('0'),sg.Button('C'),sg.Button('='),sg.Button('/')]]
window=sg.Window('Calculator',layout)
equation=''
while True:
event,values=window.Read()
if event == 'C':
equation=''
window['input'].Update(equation)
elif event=='=':
try:
print(equation)
result=eval(equation)
window['input'].Update(result)
except:
result='Error'
equation=''
window['input'].Update(equation)
elif event in ['+','-','*','/']:
equation+=event
window['input'].Update(equation)
else:
equation+=event
window['input'].Update(equation)
window.Close()
import?PySimpleGUI?as?sg
from?random?import?randint
from?matplotlib.backends.backend_tkagg?import?FigureCanvasTkAgg,?FigureCanvasAgg
from?matplotlib.figure?import?Figure
#?Yet?another?usage?of?MatPlotLib?with?animations.
def?draw_figure(canvas,?figure,?loc=(0,?0)):
????figure_canvas_agg?=?FigureCanvasTkAgg(figure,?canvas)
????figure_canvas_agg.draw()
????figure_canvas_agg.get_tk_widget().pack(side='top',?fill='both',?expand=1)
????return?figure_canvas_agg
def?main():
????NUM_DATAPOINTS?=?10000
????#?define?the?form?layout
????layout?=?[[sg.Text('Animated?Matplotlib',?size=(40,?1),
????????????????justification='center',?font='Helvetica?20')],
??????????????[sg.Canvas(size=(640,?480),?key='-CANVAS-')],
??????????????[sg.Text('Progress?through?the?data')],
??????????????[sg.Slider(range=(0,?NUM_DATAPOINTS),?size=(60,?10),
????????????????orientation='h',?key='-SLIDER-')],
??????????????[sg.Text('Number?of?data?points?to?display?on?screen')],
???????????????[sg.Slider(range=(10,?500),?default_value=40,?size=(40,?10),
????????????????????orientation='h',?key='-SLIDER-DATAPOINTS-')],
??????????????[sg.Button('Exit',?size=(10,?1),?pad=((280,?0),?3),?font='Helvetica?14')]]
????#?create?the?form?and?show?it?without?the?plot
????window?=?sg.Window('Demo?Application?-?Embedding?Matplotlib?In?PySimpleGUI',
????????????????layout,?finalize=True)
????canvas_elem?=?window['-CANVAS-']
????slider_elem?=?window['-SLIDER-']
????canvas?=?canvas_elem.TKCanvas
????#?draw?the?initial?plot?in?the?window
????fig?=?Figure()
????ax?=?fig.add_subplot(111)
????ax.set_xlabel("X?axis")
????ax.set_ylabel("Y?axis")
????ax.grid()
????fig_agg?=?draw_figure(canvas,?fig)
????#?make?a?bunch?of?random?data?points
????dpts?=?[randint(0,?10)?for?x?in?range(NUM_DATAPOINTS)]
????for?i?in?range(len(dpts)):
????????event,?values?=?window.read(timeout=10)
????????if?event?in?('Exit',?None):
????????????exit(69)
????????slider_elem.update(i)???????#?slider?shows?"progress"?through?the?data?points
????????ax.cla()????????????????????#?clear?the?subplot
????????ax.grid()???????????????????#?draw?the?grid
????????data_points?=?int(values['-SLIDER-DATAPOINTS-'])?#?draw?this?many?data?points?(on?next?line)
????????ax.plot(range(data_points),?dpts[i:i+data_points],??color='purple')
????????fig_agg.draw()
????window.close()
if?__name__?==?'__main__':
????main()
?