xml地图|网站地图|网站标签 [设为首页] [加入收藏]
APP开发平台,Ubuntu中python多版本管理工具
分类:编程

g.Size属性

设置控件的宽度和高度,将该属性设置为(120, 77),如图11;

图6 图7 图8 图9
图10 图11

4.gevent默认检测不了urllib的i/o操作

3.6.4

2.修改GridView控件的属性

阻塞 I/O(blocking IO)
非阻塞 I/O(nonblocking IO)
I/O 多路复用( IO multiplexing)
信号驱动 I/O( signal driven IO)
异步 I/O(asynchronous IO)

apt-get update
apt-get install make build-essential libssl-dev zlib1g-dev
apt-get install libbz2-dev libreadline-dev libsqlite3-dev wget curl
apt-get install llvm libncurses5-dev libncursesw5-dev

c.Columns属性

打开集合编辑器,并点击"添加"按钮旁边的三角形按钮,选择需要的列的类型,其中包括TableViewLabelColumn、TableViewButtonColumn、TableViewTextBoxColumn、TableViewCheckBoxColumn和TableViewImageColumn五种列,如图6、图7;

5.要异步操作爬虫,必须加上monkey.patch_all(),意思是把当前程序的所有的io操作单独做上标记

 

b.ColumnHeaderStyle属性

其中包括Height属性(列标题高度)、FontSize属性(列标题文本大小)、BackColor属性(列标题背景颜色)和ForeColor属性(列标题文本颜色),如图1;

将Height属性设置为“10”,如图2;

将FontSize属性设置为“5”,如图3;

将BackColor属性设置为“White”,如图4;

将ForeColor属性设置为“Black”,如图5;

图1 图2 图3 图4
图5

7.事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。另外两种常见的编程范式是(单线程)同步以及多线程编程。

>设置全局的python版本

一、目标样式

图片 1

我们要实现上图中的效果,需要如下的操作:

第一次运行fun1
第一次运行fun2
第一次运行fun3
第二次运行fun2
第二次运行fun1
第二次运行fun3

3. 安装python

f.RowHeight属性

设置表格行高度,将该属性设置为“15”,如图10;

from urllib import request
import gevent,time
from gevent import monkey
monkey.patch_all() #把当前程序的所有的io操作单独做上标记
def f(url):
    print('GET%s'%url)
    resp = request.urlopen(url)
    data = resp.read()
    print('%d 数据接收来自%s.' % (len(data), url))

start_time = time.time()
gevent.joinall([
    gevent.spawn(f, 'https://www.python.org/'),
    gevent.spawn(f, 'https://www.baidu.com/'),
    gevent.spawn(f, 'https://github.com/'),
])
print('总共时间:',time.time()-start_time)

> 查看可以安装的python版本

a.load事件代码

VB:
    Private Sub TestTableView_Load(sender As Object, e As EventArgs)Handles MyBase.Load
        Dim matTable As New DataTable
        matTable.Columns.Add("MAT_DESC1", GetType(String))
        matTable.Columns.Add("MAT_DESC2", GetType(String))
        matTable.Columns.Add("MAT_DESC3", GetType(String))
        matTable.Columns.Add("MAT_DESC4", GetType(String))
        matTable.Rows.Add()
        matTable.Rows(0)("MAT_DESC1") = "201503"
        matTable.Rows(0)("MAT_DESC2") = "mz"
        matTable.Rows(0)("MAT_DESC3") = "0"
        matTable.Rows(0)("MAT_DESC4") = "17"
        matTable.Rows.Add()
        matTable.Rows(1)("MAT_DESC1") = "201504"
        matTable.Rows(1)("MAT_DESC2") = "mz"
        matTable.Rows(1)("MAT_DESC3") = "0"
        matTable.Rows(1)("MAT_DESC4") = "17"
        matTable.Rows.Add()
        matTable.Rows(2)("MAT_DESC1") = "201505"
        matTable.Rows(2)("MAT_DESC2") = "mz"
        matTable.Rows(2)("MAT_DESC3") = "0"
        matTable.Rows(2)("MAT_DESC4") = "17"
        matTable.Rows.Add()
        matTable.Rows(3)("MAT_DESC1") = "201506"
        matTable.Rows(3)("MAT_DESC2") = "mz"
        matTable.Rows(3)("MAT_DESC3") = "0"
        matTable.Rows(3)("MAT_DESC4") = "17"        
        Me.tableView1..DataSource = matTable
        Me.tableview1.DataBind()

    End Sub

C#:
    private void Testtableview_Load(object sender, EventArgs e)
    {
        DataTable matTable = new DataTable();
        matTable.Columns.Add("MAT_DESC1", typeof(string));
        matTable.Columns.Add("MAT_DESC2", typeof(string));
        matTable.Columns.Add("MAT_DESC3", typeof(string));
        matTable.Columns.Add("MAT_DESC4", typeof(string));
        matTable.Rows.Add();
        matTable.Rows[0]["MAT_DESC1"] = "201503";
        matTable.Rows[0]["MAT_DESC2"] = "mz";
        matTable.Rows[0]["MAT_DESC3"] = "0";
        matTable.Rows[0]["MAT_DESC4"] = "17";
        matTable.Rows.Add();
        matTable.Rows[1]["MAT_DESC1"] = "201504";
        matTable.Rows[1]["MAT_DESC2"] = "mz";
        matTable.Rows[1]["MAT_DESC3"] = "0";
        matTable.Rows[1]["MAT_DESC4"] = "17";
        matTable.Rows.Add();
        matTable.Rows[2]["MAT_DESC1"] = "201505";
        matTable.Rows[2]["MAT_DESC2"] = "mz";
        matTable.Rows[2]["MAT_DESC3"] = "0";
        matTable.Rows[2]["MAT_DESC4"] = "17";
        matTable.Rows.Add();
        matTable.Rows[3]["MAT_DESC1"] = "201506";
        matTable.Rows[3]["MAT_DESC2"] = "mz";
        matTable.Rows[3]["MAT_DESC3"] = "0";
        matTable.Rows[3]["MAT_DESC4"] = "17";
        this.tableview1.DataSource = matTable;
        this.tableview1.DataBind();
    }

协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。

> 安装python的依赖包

1.从工具栏上的”Smobiler Components”拖动一个一个TableView控件到窗体界面上

图片 2

2.greenlet模块
greenlet是一个用C实现的协程模块,相比与python自带的yield,它可以使你在任意函数之间随意切换,而不需把这个函数先声明为generator

yum install readline readline-devel readline-static
yum install openssl openssl-devel openssl-static
yum install sqlite-devel
yum install bzip2-devel bzip2-libs

d.GridLinesColor属性

设置TableView表格线的颜色,将该属性设置为“Black”,如图8;

9.IO模式

 

二、手机效果显示

图片 3

1.协程(微线程)
协程是一种用户态的轻量级线程。
协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:

> 查看当前已经安装的python版本

最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便

 

3.gevent模块
gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。

eval "$(pyenv init -)"

e.Location属性

让控件显示在合适的位置(0, 122),如图9;

结果

 

6.事件驱动模型
目前大部分的UI编程都是事件驱动模型,如很多UI平台都会提供onClick()事件,这个事件就代表鼠标按下事件。事件驱动模型大体思路如下:
  1). 有一个事件(消息)队列;
  2. 鼠标按下时,往这个队列中增加一个点击事件(消息);
  3). 有个循环,不断从队列取出事件,根据不同的事件,调用不同的函数,如onClick()、onKeyDown()等;
  4). 事件(消息)一般都各自保存各自的处理函数指针,这样,每个消息都有独立的处理函数;

  1. 安装pyenv

 

> 临时改变系统运行的python版本

 

# pyenv shell xxxx

import gevent

def fun1():
    print('第一次运行fun1')
    gevent.sleep(2)           #切换到fun2的gevent.sleep(1)这一步
    print('第二次运行fun1')
def fun2():
    print('第一次运行fun2')
    gevent.sleep(1)            #sleep时间没到继续切换到fun3的gevent.sleep(2)
    print('第二次运行fun2')
def fun3():
    print('第一次运行fun3')
    gevent.sleep(2)
    print('第二次运行fun3')

gevent.joinall( [
    gevent.spawn(fun1),
    gevent.spawn(fun2),
    gevent.spawn(fun3),
])

本地要先安装git,如果本地没有git,安装会失败,并给出相关提示。

注释:此缓存 I/O 在linux环境下的I/O
详解:

anaconda3-4.1.0 # 支持 Python 3.3 和 3.4

export PYENV_ROOT="$HOME/.pyenv"

from greenlet import greenlet

def fun1():
    print(6)
    gar2.switch() #转换到gar2
    print(58)

def fun2():
    print(54)
    gar1.switch()


gar1 = greenlet(fun1) #启动协程
gar2 = greenlet(fun2)
gar1.switch()

......

 

2.7.14 # Python 2 最新版本

本文由澳门新葡亰手机版发布于编程,转载请注明出处:APP开发平台,Ubuntu中python多版本管理工具

上一篇:函数闭包,学习笔记16 下一篇:知识回顾
猜你喜欢
热门排行
精彩图文