一、基本介紹
1.使用的python開發工具是Anaconda中的Spyder

這個工具比較好用,安裝步驟直接百度即可,
2.原始代碼用到了幾個庫,用到了matplotlib庫等,百度添加相應的庫即可,
3.原始代碼的主要流程:main函式------>生成界面------>點擊按鈕呼叫輸入函式------->呼叫一元二次方程代碼函式,
二、具體代碼
這樣就得到了圖形界面與代碼的結合,
import tkinter as tk
import matplotlib.pyplot as plt
from mpl_toolkits.axisartist.axislines import SubplotZero
import numpy as np
import math
def parabola(d):
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號
"""生成畫布"""
fig = plt.figure(1, (10, 10)) # 最終生成的圖片大小
axis = SubplotZero(fig, 1, 1, 1) # 把畫布分成1 * 1的格子, 把圖形放在第1格
fig.add_subplot(axis)
"""新建坐標軸"""
axis.axis["xzero"].set_visible(True)
axis.axis['yzero'].set_visible(True)
"""生成坐標箭頭"""
axis.axis["xzero"].set_axisline_style("-|>")
axis.axis["yzero"].set_axisline_style("-|>")
axis.axis["top", "right", "left", "bottom"].set_visible(False) # 隱藏默認坐標軸
axis.grid(True, linestyle='-.') # 設定網格樣式
"""設定圖形繪制范圍"""
x_boundary = 20 # 圖形的邊界區間設定為x_boundary 的絕對值
granularity = 0.01
x = np.arange(-x_boundary, x_boundary, granularity)
a, b, c = list(map(float, d.split(' '))) # 輸入a、b、c的值
y = a * pow(x, 2) + b * x + c # 計算y的值
axis.plot(x, y)
# 添加標題
plt.title('y = ax^2 + bx + c\na={:.2f}, b={:.2f}, c={:.2f}'.format(a, b, c),
bbox=dict(facecolor='g', edgecolor='blue', alpha=0.65), fontsize='20')
"""根據a、b、c的值畫圖"""
if a == 0: # 如果a == 0, 畫一條y = bx + c的線, 并提示a不要為0
plt.text(0, 0, r'$this\ is\ a\ line\ !!!$', fontdict={'size': '20', 'color': 'red'})
plt.text(0, -1, r'$please\ make\ sure\ the\ first\ number\ is\ not\ 0!!!$', fontdict={'size': '20', 'color': 'red'})
# 如果a == 0,則沒有極值, 坐標軸默認大小
extremum_x = 0
extremum_y = 0
else:
# 計算極值點
extremum_x = - (b / (2 * a))
extremum_y = (4 * a * c - pow(b, 2)) / (4 * a)
# 標注極值點
plt.scatter(extremum_x, extremum_y)
# 根據a的符號更新描述資訊
if a > 0:
point_describe = "小"
else:
point_describe = "大"
# 距離極值點1個單位列印極值點描述
plt.text(extremum_x, extremum_y - (a / a.__abs__()),
'(%.2f, %.2f)是極%s值點' % (extremum_x, extremum_y, point_describe),
fontdict={'size': '18', 'color': 'b'})
# 如果等于0的解存在, 則求根
delta = pow(b, 2) - 4 * a * c
if delta < 0: # 沒有實根
# 距離極值點1個單位列印無實根
plt.text(extremum_x, extremum_y - 2 * (a / a.__abs__()),
'此方程沒有實根',
fontdict={'size': '18', 'color': 'red'})
elif delta == 0: # 有重根
x1 = (-b + math.sqrt(delta)) / (2 * a)
# 標注y = 0的點
plt.scatter(x1, 0)
# 距離實根1個單位列印坐標
plt.text(x1, 0 + 1 * (a / a.__abs__()),
'(%.2f, 0)是唯一實根' % x1,
fontdict={'size': '18', 'color': '#0cf'})
else: # 有兩個實根
x1 = (-b + math.sqrt(delta)) / (2 * a)
x2 = (-b - math.sqrt(delta)) / (2 * a)
# 標注y = 0的點
plt.scatter(x1, 0)
plt.scatter(x2, 0)
# 距離實根1個單位列印第1個根的坐標
plt.text(x1, 0 - 1 * (a / a.__abs__()),
'(%.2f, 0)是第一個根' % x1,
fontdict={'size': '18', 'color': '#000'})
# 距離實根1個單位列印第2個根的坐標
plt.text(x2, 0 + 1 * (a / a.__abs__()),
'(%.2f, 0)是第二個根' % x2,
fontdict={'size': '18', 'color': '#000'})
"""根據極值點動態調整坐標軸范圍"""
axis.set_xlim([extremum_x - 10, extremum_x + 10])
axis.set_ylim([-extremum_y.__abs__() - 10, extremum_y.__abs__() + 10])
plt.text(extremum_x + 10, 0.5, 'x', fontdict={'size': '18', 'color': '#000'})
plt.text(0.5, extremum_y.__abs__() + 9.2, 'y', fontdict={'size': '18', 'color': '#000'})
"""顯示圖片"""
plt.show()
def control_entry():
#獲取輸入值
d = entry_parabola.get()
#呼叫函式
parabola(d)
if __name__ == '__main__':
# 初始化
root = tk.Tk()
# 圖形界面的標題
root.title('一元函式畫圖')
# 視窗的尺寸,分別對應的寬和高
root.geometry('250x100')
# 文本提示
label_parabola = tk.Label(root, text='y=ax^2+bx+c,請輸入a,b,c的值,用空格隔開')
# 亂數展示的entry
entry_parabola = tk.Entry(root)
# 生成亂數的按鈕,按下按鈕觸發函式
#執行標簽代碼
label_parabola.pack()
#執行輸入框代碼
entry_parabola.pack()
button_gen = tk.Button(
root,
text='點擊按鈕',
command=control_entry)
#執行按鈕代碼
button_gen.pack()
# 保持圖形界面不被銷毀
root.mainloop()
三、制作軟體
直接百度:python打包 即可,
打包完成后,后綴為exe檔案,如圖:

四、總結
如此就可以制作一個簡單的python軟體,界面做的更美觀些,多添加幾個函式,就可以做成我的博客中的基本函式畫圖軟體,



轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312110.html
標籤:其他
