全網最全面的python的講解,講的無可挑剔《記得收藏》
- 目錄
- 1、簡介
- Pyhon中如何檔案拷貝
- Python數學庫及其應用
- Python例外處理機制
- ETC
- turtle庫的常用指令
- 使用turtle庫繪制五角星
- 使用turtle庫繪制蟒蛇
- 資料驅動的動態路徑繪制
- 使用蒙特卡洛方法估計圓周率的值
- 檔案回圈
- 圖形用戶界面
- 使用graphics庫實作互動式多邊形繪制
- 使用TKinter實作簡單的聊天界面
- 使用Turtle庫繪制模擬時鐘
- 使用turtle庫繪制雪花圖
- Python庫
- OS庫常用函式
- sched庫
- 函式定時執行
- 列印某一個目錄下的全部檔案
- 打包發布python應用程式(使用py2exe庫)
- NumPy庫
- Matplotlib庫
- 使用Matplotlib庫繪制曲線
- 使用Matplotlib子圖的功能
- wxPython
- 使用wxPython的絕對布局
- 使用wxPython的相對布局
- wxPython事件編程
- Python中的多執行緒編程
- scipy庫
- mpl_toolkits庫
目錄
1、簡介
我們簡單講下Python目前市場應用于領域:
- Web 和 Internet開發
- 科學計算和統計
- 人工智能
- 桌面界面開發
- 軟體開發
- 后端開發
2、網路介面:能方便進行系統維護和管理,Linux下標志性語言之一,是很多系統管理員理想的編程工具,
3、圖形處理:有PIL、Tkinter等圖形庫支持,能方便進行圖形處理,
4、數學處理:NumPy擴展提供大量與許多標準數學庫的介面,
5、文本處理:python提供的re模塊能支持正則運算式,還提供SGML,XML分析模塊,許多程式員利用python進行XML程式的開發,
6、資料庫編程:程式員可通過遵循Python DB-API(應用程式編程介面)規范的模塊與Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等資料庫通信,python自帶有一個Gadfly模塊,提供了一個完整的SQL環境,
7、網路編程:提供豐富的模塊支持sockets編程,能方便快速地開發分布式應用程式,很多大規模軟體開發計劃例如Zope,Mnet 及BitTorrent. Google都在廣泛地使用它,
8、Web編程:應用的開發語言,支持最新的XML技術,
9、多媒體應用:Python的PyOpenGL模塊封裝了“OpenGL應用程式編程介面”,能進行二維和三維影像處理,PyGame模塊可用于撰寫游戲軟體,
10、pymo引擎:PYMO全稱為python memories off,是一款運行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系統上的AVG游戲引擎,因其基于python2.0平臺開發,并且適用于創建秋之回憶(memories off)風格的AVG游戲,故命名為PYMO,
開始了!!!不廢話了

Pyhon中如何檔案拷貝
def main():
f1 = input("Enter a source file name:").strip()
f2 = input("Enter a destination file name:").strip()
infile = open(f1, 'r')
outfile = open(f2, 'w')
count_lines = count_chars = 0
for line in infile:
count_lines += 1
count_chars += len(line)
outfile.write(line)
print(count_lines, "lines and", count_chars, "chars copied")
infile.close()
outfile.close()
main()
Python數學庫及其應用

亂數庫及其應用

Python例外處理機制
Python使用try…except…else…finally,可使程式不因運行錯誤而崩潰,例外捕獲機制可以捕捉任何型別的錯誤,比如:輸入非數值型別(NameError),輸入無效的運算式(SyntaxError)等,只有當try中的陳述句沒有發生例外,else陳述句才會被執行,finally無論有無例外都會被執行:
try:
<body>except <ErrorType1>:
<handler1>except <ErrorType2>:
<handler2>except:
<handler0>else:
<process_else>finally:
<process_finally>
ETC
1.使用同步賦值陳述句實作x與y的值交換:x,y=y,x,
2.val=pow(2,1000),用一行代碼回傳val結果的長度值:len(str(val)),
3.布爾運算子的優先級從高到低依次是:not,and,or,
4.對于數字的零值被認為是false,任何非零值都是true,對序列型別來說,空序列被認為是false,非空序列認為是true,
5.常用編碼:
- ASCII碼是標準化字符集,用7個二進制位編碼表示128個字符,
- Unicode跨語言,跨平臺,同意且唯一的二進制編碼,每個字符兩個位元組長,
- UTF8編碼,可變長度的Unicode,英文對應1個位元組,中文對應3個位元組,
6.python中字串型別未編碼,可以用encode()進行編碼,decode()進行解碼,

turtle庫的常用指令
1.turtle庫以螢屏中心為坐標原點,
2.forward(distance)將箭頭移到某一指定坐標,
3.left(angle)/right(angle)向左/右旋轉一個角度,
4.penup()提起筆,用于另起一個地方繪制時使用,與pendown()配對使用,
5.goto(x,y),
6.home(),
7.circle(radius),
8.speed(),
使用turtle庫繪制五角星
import turtle
p = turtle.Turtle()
p.speed(3)
p.pensize(5)
p.color("black")
p.fillcolor("red")
p.begin_fill()for i in range(5):
p.forward(200)
p.right(144)
p.end_fill()
使用turtle庫繪制蟒蛇
import turtle
def draw_snake(rad, angle, len, neckrad):
for i in range(len):
turtle.circle(rad, angle)
turtle.circle(-rad, angle)
turtle.circle(rad, angle, 2)
turtle.fd(rad)
turtle.circle(neckrad + 1, 180)
turtle.fd(rad * 2 / 3)
def main():
turtle.setup(1300, 800, 0, 0)
pythonsize = 30
turtle.pensize(pythonsize)
turtle.pencolor("blue")
turtle.seth(-40)
draw_snake(40, 80, 5, pythonsize / 2)
main()
資料驅動的動態路徑繪制
import turtle
def main():
turtle.title("資料驅動的動態路徑繪制")
turtle.setup(800, 600, 0, 0)
pen = turtle.Turtle()
pen.color('red')
pen.width(5)
pen.shape("turtle")
pen.speed(5)
result = []
file = open("a.txt", 'r')
for line in file:
result.append(list(map(float, line.split(','))))
print(result)
for i in range(len(result)):
pen.color((result[i][3], result[i][4], result[i][5]))
pen.forward(result[i][0])
if result[i][1]:
pen.right(result[i][2])
else:
pen.left(result[i][2])
pen.goto(0, 0)
if __name__ == '__main__':
main()
使用蒙特卡洛方法估計圓周率的值
from random import *from math import *from time import *
DARTS = 1000000
hits = 0
clock()for i in range(1,DARTS):
x,y=random(),random()
dist = sqrt(x**2+y**2)
if(dist <= 1.0):
hits = hits+1
pi = 4*(hits/DARTS)print("Pi的值是:%s"%pi)print("程式運行時間是 %-5.5ss"%clock())
##尋找素數
for n in range(2,100):
for x in range(2,n):
if n % x == 0:
print(n, "equals", x, "*", n//x)
break;
else:
print(n, "is a prime number")
檔案回圈
def main():
file_name = input("What's the file path?")
try:
infile = open(file_name, 'r')
except FileNotFoundError:
print("\nFile not found")
else:
msum = 0.0
count = 0
line = infile.readline()
while line != "":
msum += eval(line)
count += 1
line = infile.readline()
print("\nThe average of the numbers is", msum / count)
main()
圖形用戶界面
TKinter——Python標準GUI
1、15中常見的Tk控制元件

2、3種布局管理方法

3、控制元件的共同屬性

Graphics——基于Tkinter擴展
1、GraphWin物件常用方法

2、圖形物件通用方法

3、Point物件方法

4、Line物件方法

5、Circle物件方法

6、Rectangle物件方法

7、Oval物件方法 
8、Polygon物件方法

9、Text物件方法

Turtle——Python內置的圖形庫
使用graphics庫實作互動式多邊形繪制
from graphics import *
def main():
win = GraphWin("Draw a polygon", 300, 300)
win.setCoords(0, 0, 300, 300)
message = Text(Point(150, 20), "CLick on five points")
message.draw(win)
p1 = win.getMouse()
p1.draw(win)
p2 = win.getMouse()
p2.draw(win)
p3 = win.getMouse()
p3.draw(win)
p4 = win.getMouse()
p4.draw(win)
p5 = win.getMouse()
p5.draw(win)
polygon = Polygon(p1, p2, p3, p4, p5)
polygon.setFill("peachpuff")
polygon.setOutline("black")
polygon.draw(win)
message.setText("Click anywhere to quit.")
win.getMouse()
main()
使用TKinter實作簡單的聊天界面
from tkinter import *import time
def main():
def send_msg():
strMsg = "我:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + "\n"
txtMsgList.insert(END, strMsg, 'greencolor')
txtMsgList.insert(END, txtMsg.get('0.0', END))
txtMsg.delete('0.0', END)
def cancelMsg():
txtMsg.delete('0.0', END)
def send_msg_event(event):
if event.keysym == "Up":
send_msg()
# 創建視窗
t = Tk()
t.title("與Python聊天中")
# 創建Frame容器
frmLT = Frame(width=500, height=320, bg="white")
frmLC = Frame(width=500, height=150, bg="white")
frmLB = Frame(width=500, height=30)
frmRT = Frame(width=200, height=500)
# 創建控制元件
txtMsgList = Text(frmLT)
txtMsgList.tag_configure("greencolor", foreground="#008c00") # 創建tag
txtMsg = Text(frmLC)
txtMsg.bind("<KeyPress-Up>", send_msg_event)
btnSend = Button(frmLB, text='發送', width=8, command=send_msg)
btnCancel = Button(frmLB, text='取消', width=8, command=cancelMsg)
imgInfo = PhotoImage(file="python.gif")
lblImage = Label(frmRT, image=imgInfo)
lblImage.image = imgInfo
# 視窗布局
frmLT.grid(row=0, column=0, columnspan=2, padx=1, pady=3)
frmLC.grid(row=1, column=0, columnspan=2, padx=1, pady=3)
frmLB.grid(row=2, column=0, columnspan=2)
frmRT.grid(row=0, column=2, rowspan=3, padx=2, pady=3)
# 固定大小
frmLT.grid_propagate(0)
frmLC.grid_propagate(0)
frmLB.grid_propagate(0)
frmRT.grid_propagate(0)
btnSend.grid(row=2, column=0)
btnCancel.grid(row=2, column=1)
lblImage.grid()
txtMsgList.grid()
txtMsg.grid()
t.mainloop()
main()
使用Turtle庫繪制模擬時鐘
from turtle import *from datetime import *
def Skip(step):
penup()
forward(step)
pendown()
def mkHand(name, length):
# 注冊Turtle形狀,建立表針Turtle
reset()
Skip(-length * 0.1)
begin_poly()
forward(length * 1.1)
end_poly()
handForm = get_poly()
register_shape(name, handForm)
def Init():
global secHand, minHand, hurHand, printer
mode("logo") # 重置Turtle指向北
# 建立三個表針Turtle并初始化
mkHand("secHand", 125)
mkHand("minHand", 130)
mkHand("hurHand", 90)
secHand = Turtle()
secHand.shape("secHand")
minHand = Turtle()
minHand.shape("minHand")
hurHand = Turtle()
hurHand.shape("hurHand")
for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0)
# 建立輸出文字Turtle
printer = Turtle()
printer.hideturtle()
printer.penup()
def SetupClock(radius):
# 建立表的外框
reset()
pensize(7)
for i in range(60):
Skip(radius)
if i % 5 == 0:
forward(20)
Skip(-radius - 20)
else:
dot(5)
Skip(-radius)
right(6)
def Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()]
def Date(t):
y = t.year
m = t.month
d = t.day
return "%s %d %d" % (y, m, d)
def Tick():
# 繪制表針的動態顯示
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)
tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",
font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t), align="center",
font=("Courier", 14, "bold"))
printer.home()
tracer(True)
ontimer(Tick, 100) # 100ms后繼續呼叫tick
def main():
tracer(False)
Init()
SetupClock(160)
tracer(True)
Tick()
mainloop()
if __name__ == "__main__":
main()
使用turtle庫繪制雪花圖
import turtle as ttimport random as rd
def ground():
tt.hideturtle()
tt.speed(100)
for i in range(400):
tt.pensize(rd.randint(5, 10))
x = rd.randint(-400, 350)
y = rd.randint(-280, -1)
r = -y / 280
g = -y / 280
b = -y / 280
tt.pencolor((r, g, b))
tt.penup()
tt.goto(x, y)
tt.pendown()
tt.forward(rd.randint(40, 100))
def snow():
tt.hideturtle()
tt.pensize(2)
tt.speed(100)
for i in range(100):
r = rd.random()
g = rd.random()
b = rd.random()
tt.pencolor(r, g, b)
tt.penup()
tt.setx(rd.randint(-350, 350))
tt.sety(rd.randint(1, 270))
tt.pendown()
dens = rd.randint(8, 12)
snowsize = rd.randint(10, 14)
for j in range(dens):
tt.forward(snowsize)
tt.backward(snowsize)
tt.right(360 / dens)
def main():
tt.setup(800, 600, 0, 0)
tt.tracer(False)
tt.bgcolor("black")
snow()
ground()
tt.tracer(True)
tt.mainloop()
if __name__ == "__main__":
main()
Python庫
1.Python官網提供的Python庫索引(opens new window)
2.Python庫的安裝
自定義安裝,去國內鏡像站下載軟體國內pipy鏡像站

使用pip工具
檔案安裝,通過.whl檔案安裝
pip inatall xxx.whl
pip工具的安裝
pip原始碼下載地址(opens new window)
解壓后執行:python setup.py install即可
OS庫常用函式
1、OS庫常用函式

2、os.path是處理作業系統的一個字庫,os.path常用函式

3、os.walk(path)用于遍歷一個目錄,回傳一個三元組
-
root,dirs,files = os.walk(path),
-
root是字串,dirs和files是串列型別,表示root中的所有目錄和所有檔案,
sched庫
1.sched庫用來進行任務調度,
2.sched.scheduler()用來創建一個調度任務,
3.當需要對一個任務進行時間調度時,用這個函式scheduler.enter(delay,priority,action,argument=()),
4.delay表示延時多少時間去執行,
5.priority表示優先級,
6.action是具體需要調度的函式,
7.argument表示action函式需要的引數變數,
8.scheduler.run()運行調度任務中的全部調度事件,
9.scheduler.cancel(event)取消某個調度事件,
函式定時執行
import schedimport time
def print_time(msg='default'):
print("當前時間", time.time(), msg)
s = sched.scheduler(time.time, time.sleep)print(time.time())
s.enter(5, 1, print_time, argument=("延遲5秒,優先級1",))
s.enter(3, 2, print_time, argument=("延遲3秒,優先級2",))
s.enter(3, 1, print_time, argument=("延遲3秒,優先級1",))
s.run()print(time.time())
列印某一個目錄下的全部檔案
import os
path = input("請輸入一個路徑:")
for root, dirs, files in os.walk(path):
for name in files:
print(os.path.join(root, name))
打包發布python應用程式(使用py2exe庫)
1.確定python程式可以執行,比如lesson.py,
2.寫一個發布腳本setup.py(與lesson.py同目錄),在里面指名需要呼叫運行的python程式,
from distutils.core import
setupimport py2exe
setup(console=['lesson.py'])
3.在命令列下執行python setup.py py2exe,
4.程式正確執行后會生成dist目錄和__pycache__目錄,前者包含了發布的exe程式,后者可以洗掉,
NumPy庫
1、NumPy系統是Python的一種開源的數值計算擴展,能夠存盤和處理大型矩陣
-
N維陣列物件Array,
-
函式庫,
-
實用的線性代數、傅里葉變換和亂數生成函式,
2、NumPy提供了許多高級的數值編程工具
-
矩陣資料型別
-
矢量處理
-
運算庫
3、NumPy的主要物件是同種元素的多維陣列
-
維度叫做軸
-
軸的個數叫做秩
-
NumPy的陣列類被稱為ndarray,通常被稱作陣列

1、創建陣列 -
使用array函式,利用常規的Python串列和元祖創造陣列,所創建的陣列型別由原序列中的元素型別決定,例如:a=array([[1,2],[3,4]],dtype=complex).
-
使用占位符創建陣列,例如函式zeros創建一個全是0的陣列,函式ones創建一個全是的陣列,函式empty創建一個內容隨機并且依賴于記憶體狀態的陣列,
-
利用arrange創建陣列:arrange(10,30,5),從10開始,每次加5,直到30(不包括)
2、列印陣列,類似于嵌套串列,
3、陣列的算數運算按元素進行,NumPy中的乘法運算子*指示按元素計算,
4、矩陣乘法可以使用dot函式或創建矩陣物件實作,
5、NumPy提供常見的數學函式如sin、cos和exp,
6、NumPy對于多維陣列的運算,預設情況下并不使用矩陣運算,對陣列進行矩陣運算,可呼叫相應的函式,
7、NumPy庫提供了matrix類,使用matrix類創建的是矩陣物件,他們的加減乘除運算采用矩陣方式計算,
8、創建等比數列:numpy.logspace(1,10,3)表示在1到10中生成3個等比數列,
9、創建結構陣列:
- 宣告結構陣列型別:person=np.dtype({‘names’:[‘name’,‘age’],‘formats’:[‘S32’,‘i’]})
- 創建結構陣列:a = np.array([(‘zhang’,12)],dtype=person)
- 訪問結構陣列的成員:a[0][‘name’]
10、更高級的運算:NumPy線型代數子庫linalg,
-
inv函式:計算逆矩陣,
-
solve函式:求解多元一次方程組,
Matplotlib庫
1、Matplotlib是一個資料可視化函式庫,
2、pyplot子庫提供了2D圖表制作的基本函式,
3、matplotlib提供的直方圖繪制函式為hist(),
4、matplotlib的image子庫可用來對影像進行操作,
- imread()函式將影像的各像素點的RGB值存入陣列,
- imshow()函式將存有RGB值的影像陣列以影像的方式顯示出來,
使用Matplotlib庫繪制曲線
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
y = np.sin(x)
z = np.cos(x * x)
plt.figure(figsize=(8, 4))
plt.plot(x, z, "ro", label="$cos(x^2)$")
plt.plot(x, y, label="$sin(x)$")
plt.xlabel("Time/s")
plt.ylabel("")
plt.legend()
plt.title("matplotlib")
plt.show()
使用Matplotlib子圖的功能
import numpy as npimport matplotlib.pyplot as plt
w = np.linspace(0.1, 1000, 1000)
p = np.abs(1 / (1 + 0.1j * w))
plt.subplot(221)
plt.plot(w, p, linewidth=2)
plt.ylim(0, 1.5)
plt.subplot(222)
plt.semilogx(w, p, linewidth=2)
plt.ylim(0, 1.5)
plt.subplot(223)
plt.semilogy(w, p, linewidth=2)
plt.ylim(0, 1.5)
plt.subplot(224)
plt.loglog(w, p, linewidth=2)
plt.ylim(0, 1.5)
plt.show()
wxPython
1、wxPython是wxWidgets在python語言下的封裝,wxWidgets是一個跨平臺的GUI應用程式介面,使用C++撰寫,
2、對于Python3,wxPython的下載地址?(opens new window),注意選擇對應的python版本號以及電腦的位數,
3、控制元件的事件:
- 按鈕點擊
- 文本域內容的改變
- 滑鼠滑過
- 滑鼠雙擊
- 鍵盤按下
使用wxPython的絕對布局
# -*-coding:utf8-*-import wx
'''堆砌各個控制元件,基于坐標位置的控制元件絕對布局'''
class Lesson(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, id=-1, title=u'極客學院', size=(600, 600))
panel = wx.Panel(self, -1)
self.Centre()
button = wx.Button(panel, label=u'我是按鈕', pos=(20, 0), size=(100, 100))
statictext = wx.StaticText(panel, -1, u'我是不能編輯的文本框', pos=(20, 100))
text = wx.TextCtrl(panel, -1, u'請在這里輸入內容', pos=(200, 210))
password = wx.TextCtrl(panel, -1, u'請在這里輸入內容', style=wx.TE_PASSWORD, pos=(200, 250))
mutiText = wx.TextCtrl(panel, -1, u'我是多行\n文本框', style=wx.TE_MULTILINE, pos=(100, 300))
checkBox1 = wx.CheckBox(panel, -1, u"我是復選框1", pos=(150, 20))
checkBox2 = wx.CheckBox(panel, -1, u"我是復選框2", pos=(150, 40))
radio1 = wx.RadioButton(panel, -1, u"我是單選按鈕1", pos=(150, 60), style=wx.RB_GROUP)
radio2 = wx.RadioButton(panel, -1, u"我是單選按鈕2", pos=(150, 80))
radio3 = wx.RadioButton(panel, -1, u"我是單選按鈕3", pos=(150, 100))
radioList = [u'一組單選按鈕之1', u'一組單選按鈕之2', u'一組單選按鈕之3']
wx.RadioBox(panel, -1, u"一組單選按鈕", (10, 120), wx.DefaultSize, radioList, 2, wx.RA_SPECIFY_ROWS)
jikexueyuan = [u'極', u'客', u'學', u'院', '1', '2', '3', '4', '5', '6']
listBox = wx.ListBox(panel, -1, pos=(300, 20), size=(100, 100), choices=jikexueyuan, style=wx.LB_MULTIPLE)
img = wx.Image(r'python.gif', wx.BITMAP_TYPE_ANY).Scale(100, 200)
sb1 = wx.StaticBitmap(panel, -1, wx.BitmapFromImage(img), pos=(300, 300))
if __name__ == "__main__":
app = wx.App()
frame = Lesson()
frame.Show()
app.MainLoop()
使用wxPython的相對布局
# -*-coding:utf8-*-
import wx
'''基于Sizer的控制元件相對布局'''
class Lesson(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, id=-1, title=u'極客學院', size=(600, 600))
self.panel = wx.Panel(self, -1)
self.Centre()
# 定義我們需要的各個控制元件
commandStatic = wx.StaticText(self.panel, -1, u'輸命令:')
writePyStatic = wx.StaticText(self.panel, -1, u'寫代碼:')
commandText = wx.TextCtrl(self.panel, -1, u'')
writePyText = wx.TextCtrl(self.panel, -1, u'''#-*-coding:utf-8-*-\n#在這寫Python代碼''',
style=wx.TE_MULTILINE, size=(300, 200))
send = wx.Button(self.panel, label=u'發送命令')
clear = wx.Button(self.panel, label=u'清空命令')
screen = wx.Button(self.panel, label=u'查看螢屏')
serverList = ['192.168.0.4', '10.19.2.1', '192.168.0.111', '172.26.123.5', '192.168.6.11', '192.99.8.8']
server = wx.ListBox(self.panel, -1, size=(120, 100), choices=serverList, style=wx.LB_SINGLE)
img = wx.Image(r'python_logo.gif', wx.BITMAP_TYPE_ANY).Scale(200, 200)
screenBox = wx.StaticBitmap(self.panel, -1, wx.BitmapFromImage(img))
# 基于BoxSizer布局
# hBoxAll = wx.BoxSizer(wx.HORIZONTAL)
# vBoxControl = wx.BoxSizer(wx.VERTICAL)
# hBoxCommand = wx.BoxSizer(wx.HORIZONTAL)
# vBoxWrite = wx.BoxSizer(wx.VERTICAL)
# hBoxButton = wx.BoxSizer(wx.HORIZONTAL)
#
# hBoxCommand.Add(commandStatic, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
# hBoxCommand.Add(commandText, proportion=2, flag=wx.ALL | wx.EXPAND, border=5)
#
# vBoxWrite.Add(writePyStatic, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
# vBoxWrite.Add(writePyText, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
#
# vBoxControl.Add(hBoxCommand, proportion=0, flag=wx.ALL, border=5)
# vBoxControl.Add(vBoxWrite, proportion=0, flag=wx.ALL, border=5)
#
# hBoxButton.Add(send, proportion=0, flag=wx.ALL, border=5)
# hBoxButton.Add(clear, proportion=0, flag=wx.ALL, border=5)
# hBoxButton.Add(screen, proportion=0, flag=wx.ALL, border=5)
#
# vBoxControl.Add(hBoxButton, proportion=0, flag=wx.ALL, border=5)
#
# hBoxAll.Add(server, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
# hBoxAll.Add(vBoxControl, proportion=2, flag=wx.ALL | wx.EXPAND, border=5)
# hBoxAll.Add(screenBox, proportion=3, flag=wx.ALL | wx.EXPAND, border=5)
#
# self.panel.SetSizer(hBoxAll)
# hBoxAll.Fit(self)
# 基于GridSizer布局
# gridSizerAll= wx.GridSizer(rows=3, cols=3, hgap=5, vgap=5)
# gridSizerAll.AddMany([(server, 0, wx.EXPAND), (commandStatic, 0, wx.EXPAND), (commandText, 0, wx.EXPAND),
# (writePyStatic, 0, wx.EXPAND), (send, 0, wx.EXPAND), (clear, 0, wx.EXPAND),
# (writePyText, 0, wx.EXPAND), (screen, 0, wx.EXPAND), (screenBox, 0, wx.EXPAND)])
# self.panel.SetSizer(gridSizerAll)
# gridSizerAll.Fit(self)
#基于FlexGridSizer布局
# flexGridSizerAll = wx.FlexGridSizer(rows=3, cols=3, hgap=5, vgap=5)
# flexGridSizerAll.AddMany([(server, 0, wx.EXPAND), (commandStatic, 0, wx.EXPAND), (commandText, 0, wx.EXPAND),
# (writePyStatic, 0, wx.EXPAND), (send, 0, wx.EXPAND), (clear, 0, wx.EXPAND),
# (writePyText, 0, wx.EXPAND), (screen, 0, wx.EXPAND), (screenBox, 0, wx.EXPAND)])
# self.panel.SetSizer(flexGridSizerAll)
#
# flexGridSizerAll.AddGrowableCol(2, 1)
# flexGridSizerAll.AddGrowableRow(2, 1)
#
# flexGridSizerAll.Fit(self)
#基于GirdBagSizer布局
gridBagSizerAll = wx.GridBagSizer(hgap=5, vgap=5)
gridBagSizerAll.Add(server, pos=(0, 0),
flag=wx.ALL | wx.EXPAND,
span=(7, 2), border=5)
gridBagSizerAll.Add(commandStatic, pos=(0, 2),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
border=5)
gridBagSizerAll.Add(commandText, pos=(0, 3),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 2), border=5)
gridBagSizerAll.Add(writePyStatic, pos=(1, 2),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 3), border=5)
gridBagSizerAll.Add(writePyText, pos=(2, 2),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(4, 3), border=5)
gridBagSizerAll.Add(send, pos=(6, 2),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 1), border=5)
gridBagSizerAll.Add(clear, pos=(6, 3),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 1), border=5)
gridBagSizerAll.Add(screen, pos=(6, 4),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 1), border=5)
gridBagSizerAll.Add(screenBox, pos=(0, 5),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(7, 2), border=5)
self.panel.SetSizer(gridBagSizerAll)
self.SetSizeHints(250, 200, 700, 400) # 設定視窗的最大最小值
# gridBagSizerAll.AddGrowableCol(0, 1)
# gridBagSizerAll.AddGrowableCol(1, 1)
# gridBagSizerAll.AddGrowableCol(2, 1)
# gridBagSizerAll.AddGrowableCol(3, 1)
# gridBagSizerAll.AddGrowableCol(4, 1)
# gridBagSizerAll.AddGrowableCol(5, 1)
# gridBagSizerAll.AddGrowableCol(6, 1)
#
# gridBagSizerAll.AddGrowableRow(0, 1)
# gridBagSizerAll.AddGrowableRow(1, 1)
# gridBagSizerAll.AddGrowableRow(2, 1)
# gridBagSizerAll.AddGrowableRow(3, 1)
# gridBagSizerAll.AddGrowableRow(4, 1)
# gridBagSizerAll.AddGrowableRow(5, 1)
# gridBagSizerAll.AddGrowableRow(6, 1)
gridBagSizerAll.Fit(self)
if __name__ == "__main__":
app = wx.App()
frame = Lesson()
frame.Show()
app.MainLoop()
wxPython事件編程
# -*-coding:utf8-*-
import time
import wx
'''基于Sizer的控制元件相對布局'''
class Example3(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, id=-1, title=u'極客學院', size=(600, 600))
self.panel = wx.Panel(self, -1)
self.Centre()
# 定義我們需要的各個控制元件
commandStatic = wx.StaticText(self.panel, -1, u'輸命令:')
writePyStatic = wx.StaticText(self.panel, -1, u'寫代碼:')
self.commandText = wx.TextCtrl(self.panel, -1, u'')
self.writePyText = wx.TextCtrl(self.panel, -1, u'''#-*-coding:utf-8-*-\n#在這寫Python代碼''',
style=wx.TE_MULTILINE, size=(300, 200))
self.send = wx.Button(self.panel, label=u'發送命令')
self.clear = wx.Button(self.panel, label=u'清空命令')
self.screen = wx.Button(self.panel, label=u'查看螢屏')
self.serverList = ['192.168.0.4', '10.19.2.1', '192.168.0.111', '172.26.123.5', '192.168.6.11', '192.99.8.8']
self.server = wx.ListBox(self.panel, -1, size=(120, 100), choices=self.serverList, style=wx.LB_SINGLE)
img = wx.Image(r'python_logo.gif', wx.BITMAP_TYPE_ANY).Scale(200, 200)
self.screenBox = wx.StaticBitmap(self.panel, -1, wx.BitmapFromImage(img))
self.Bind(wx.EVT_BUTTON, self.onSend, self.send)
self.Bind(wx.EVT_BUTTON, self.onClear, self.clear)
self.Bind(wx.EVT_BUTTON, self.onScreen, self.screen)
# 基于GirdBagSizer布局
self.gridBagSizerAll = wx.GridBagSizer(hgap=5, vgap=5)
self.gridBagSizerAll.Add(self.server, pos=(0, 0),
flag=wx.ALL | wx.EXPAND,
span=(7, 2), border=5)
self.gridBagSizerAll.Add(commandStatic, pos=(0, 2),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
border=5)
self.gridBagSizerAll.Add(self.commandText, pos=(0, 3),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 2), border=5)
self.gridBagSizerAll.Add(writePyStatic, pos=(1, 2),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 3), border=5)
self.gridBagSizerAll.Add(self.writePyText, pos=(2, 2),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(4, 3), border=5)
self.gridBagSizerAll.Add(self.send, pos=(6, 2),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 1), border=5)
self.gridBagSizerAll.Add(self.clear, pos=(6, 3),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 1), border=5)
self.gridBagSizerAll.Add(self.screen, pos=(6, 4),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(1, 1), border=5)
self.gridBagSizerAll.Add(self.screenBox, pos=(0, 5),
flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
span=(7, 2), border=5)
self.panel.SetSizer(self.gridBagSizerAll)
# self.SetSizeHints(250, 200, 700, 400) #設定視窗的最大最小值
self.gridBagSizerAll.AddGrowableCol(0, 1)
self.gridBagSizerAll.AddGrowableCol(1, 1)
self.gridBagSizerAll.AddGrowableCol(2, 1)
self.gridBagSizerAll.AddGrowableCol(3, 1)
self.gridBagSizerAll.AddGrowableCol(4, 1)
self.gridBagSizerAll.AddGrowableCol(5, 1)
self.gridBagSizerAll.AddGrowableCol(6, 1)
self.gridBagSizerAll.AddGrowableRow(0, 1)
self.gridBagSizerAll.AddGrowableRow(1, 1)
self.gridBagSizerAll.AddGrowableRow(2, 1)
self.gridBagSizerAll.AddGrowableRow(3, 1)
self.gridBagSizerAll.AddGrowableRow(4, 1)
self.gridBagSizerAll.AddGrowableRow(5, 1)
self.gridBagSizerAll.AddGrowableRow(6, 1)
self.gridBagSizerAll.Fit(self)
def onSend(self, event):
time.sleep(0.5)
if self.server.GetSelection() != -1:
server = self.serverList[self.server.GetSelection()]
else:
server = u'未選擇服務器'
command = self.commandText.GetValue()
writePy = self.writePyText.GetValue()
print(u'選中的服務器是: %s' % server)
print(u'執行的內置命令是: %s' % command)
print(u'寫入的Python代碼是:\n%s' % writePy)
def onClear(self, event):
self.commandText.Clear()
self.writePyText.Clear()
self.writePyText.AppendText(u'''#-*-coding:utf-8-*-\n#在這些Python代碼''')
def onScreen(self, event):
img = wx.Image(r'python.gif', wx.BITMAP_TYPE_ANY).Scale(300, 200)
self.screenBox.SetBitmap(wx.BitmapFromImage(img))
self.gridBagSizerAll.Fit(self)
if __name__ == "__main__":
app = wx.App()
frame = Example3()
frame.Show()
app.MainLoop()
Python中的多執行緒編程
1、thread.start_new_thread(函式名,(引數1,引數2,···)),
2、或者使用Threading模塊創建執行緒,
大家們看了那么久文章,你們可以點個收藏,休息會!!!然后再看,不要忘記哦!學習要持之以恒你才有進步,加油加油!!!

scipy庫
1、解非線性方程組
scipy.optimize子庫中的fsolve函式:fsolve(函式, 初始解, 雅可比矩陣)
from math import sin, cos
from scipy.optimize import fsolve
def func(x):
x0, x1, x2 = x.tolist()
return [
5 * x1 + 3,
4 * x0 * x0 - 2 * sin(x1 * x2),
x1 * x2 - 1.5
]
def j(x):
x0, x1, x2 = x.tolist()
return [
[0, 5, 0],
[8 * x0, -2 * x2 * cos(x1 * x2), -2 * x1 * cos(x1 * x2)],
[0, x2, x1]
]
r = fsolve(func, [1, 1, 1], fprime=j)
print(r)
休息回來的朋友你們真棒,沒有休息的朋友你們更棒,我們繼續往下看!!!

2、數值積分
- scipy.integrate子庫中的quad函式:
一重積分:quad(函式,定積分下限,定積分上限)
雙重積分:dblquad
三重積分:tplquad
from scipy.integrate import quad
def func(x):
return (1 - x * x) ** 0.5
p, err = quad(func, -1, 1)print(2 * p)
求解常微分方程
1.scipy.integrate子庫中的odeint
from scipy.integrate import odeintimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as plt
def lorenz(w, t, p, r, b):
x, y, z = w
return np.array([p * (y - x), x * (r - z), x * y - b * z])
t = np.arange(0, 30, 0.01)
track = odeint(lorenz, (0.0, 1.00, 0.0), t, args=(10.0, 28.0, 3.0))
fig = plt.figure()
ax = Axes3D(fig)
ax.plot(track[:, 0], track[:,1], track[:,2])
plt.show()
數值微分
1、scipu.misc子庫中的derivative
import numpy as np
import matplotlib.pyplot as pltfrom scipy.misc
import derivative
Ex = lambda q: q ** 2
x0 = np.linspace(-10, 10, 1000)
dEx = derivative(Ex, x0, dx=1e-6)
plt.plot(x0, dEx)
plt.show()
mpl_toolkits庫
from mpl_toolkits.mplot3d
import Axes3Dimport numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = Axes3D(fig)
th = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z ** 2 + 1
x = r * np.sin(th)
y = r * np.cos(th)
ax.plot()

關注蘇州程式大白,持續更新技術分享,謝謝大家支持
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/286315.html
標籤:python
上一篇:用Python編程識別手勢數字
