用python制作用户图形界面

PySimpleGui是一个Python的Gui库,比较接地气易上手。所以我就简单做了个计算插值多项式的程序试试手。第一次写UI代码,c++高手勿扰。

  1. 运行程序,首先输入插值节点的数量;


    用python制作用户图形界面_第1张图片
  2. 然后输入各个节点的坐标,图中的数据正好是我这周助教课的作业;


    用python制作用户图形界面_第2张图片
  3. 得到插值多项式结果;
    用python制作用户图形界面_第3张图片

大概说一下注意点:

  1. python并不自带PySimpleGui这个库,所以要利用pip或conda安装,即在cmd中运行
pip install PySimpleGUI
  1. 创建窗口
import PySimpleGUI as sg
form = sg.FlexForm('begin with a blank form')  
  1. 规划用户界面,将gui按行切分; 第一行文本框和输入框,第二行提交框和取消框;
layout = [
          [sg.Text('number', size=(5,1)), sg.InputText('')],
          [sg.Submit(), sg.Cancel()]
         ]
  1. 执行点击操作;
button, values = form.Layout(layout).Read()
  1. 关闭窗口
form.Close()
  1. 其他配件
sg.OK() # ok键
sg.InputCombo(['男','女','隐私'],auto_size_text=True) # 下拉选项
sg.Slider(range=(1,10)) # 滑动条及其范围 
sg.Radio('游泳',group_id=1),sg.Radio('跑步',group_id=2),sg.Radio('篮球',group_id=3) # 按钮
sg.Checkbox('是'),sg.Checkbox(否') # 选择框
sg.FolderBrowse(target='input') # 文件夹浏览
sg.ProgressBar(100,orientation = 'h', size=(20,20),key='progressbar') # 进度条
  1. 插值计算,直接调用scipy的插值库函数;
from scipy.interpolate import lagrange
result = lagrange(x,y)

全部代码

"""
Created on 2019-03-16
@author:Jupiter
"""
import PySimpleGUI as sg
from scipy.interpolate import lagrange

# 修改插值多项式格式
def change(ret):
    length,nret = ret.order,'y='
    if length > 1:
        nret += str(round(ret.c[0],4))+'x^'+str(length)
        for i in range(length-2):
            if ret.c[i+1]>0:
                nret += '+' + str(round(ret.c[i+1],4))+'x^'+str(length-i-1)
            else :
                nret += str(round(ret.c[i+1],4))+'x^'+str(length-i-1)
    if length >= 1:
        if ret.c[-2] >= 0:
            nret += '+'+str(round(ret.c[-2],4))+'x'
        else :
            nret += str(round(ret.c[-2],4))+'x'
    if ret.c[-1] >= 0:
        nret += '+'+str(round(ret.c[-1],4))
    else :
        nret += str(round(ret.c[-1],4))

    return nret

# 获取插值节点数量
form1 = sg.FlexForm('输入插值节点数量(n≥2)')  
layout = [
          #[sg.InputCombo(['男','女','隐私'],auto_size_text=True)],
          [sg.Text('number', size=(5,1)), sg.InputText('')],
          [sg.Submit(), sg.Cancel()]
         ]
button, values = form1.Layout(layout).Read()
print(button, values[0])
form1.Close()

# 获取插值节点坐标
form2= sg.FlexForm('输入节点坐标')  
layout = []
for i in range(int(values[0])):
    layout.append([sg.Text('(x,y)', size=(3,2)),sg.Input(),sg.Input()])
layout.append( [sg.Text('Author:Jupiter')])
layout.append( [sg.Submit(), sg.Cancel()])

button, values = form2.Layout(layout).Read()
form2.Close()

x,y = [],[]1
for i in range(len(values)//2):
    x.append(float(values[i*2]))
    y.append(float(values[i*2+1]))

print(button,x,y)
#ret = lagrange(x,y)
ret = change(lagrange(x,y))

# 输出多项式插值结果
form3= sg.FlexForm('多项式插值结果')
layout = [[sg.Text('插值多项式',size=(10,1))]]

for i in range(len(x)):
    layout.append([sg.Text('(x,y)'),sg.Text(x[i]),sg.Text(y[i])])
layout.append([sg.Text('------------------------------------')])
layout.append([sg.Text(ret)])
layout.append([sg.OK(),sg.Cancel(),sg.Text('Author:Jupiter')])

button, values = form3.Layout(layout).Read()

你可能感兴趣的:(用python制作用户图形界面)