python使用界面-用python制作用户图形界面

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

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

87e82a42aec1

然后输入各个节点的坐标,图中的数据正好是我这周助教课的作业;

87e82a42aec1

得到插值多项式结果;

87e82a42aec1

大概说一下注意点:

python并不自带PySimpleGui这个库,所以要利用pip或conda安装,即在cmd中运行

pip install PySimpleGUI

创建窗口

import PySimpleGUI as sg

form = sg.FlexForm('begin with a blank form')

规划用户界面,将gui按行切分; 第一行文本框和输入框,第二行提交框和取消框;

layout = [

[sg.Text('number', size=(5,1)), sg.InputText('')],

[sg.Submit(), sg.Cancel()]

]

执行点击操作;

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

关闭窗口

form.Close()

其他配件

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') # 进度条

插值计算,直接调用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()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值