Func_advanced.py 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890
  1. from __future__ import division#让/恢复为除法
  2. import sympy
  3. from matplotlib import pyplot as plt
  4. from matplotlib import rcParams
  5. import tkinter,tkinter.messagebox
  6. import random
  7. from New_TK import DragWindow
  8. from matplotlib.animation import FuncAnimation
  9. from HSCH.HS import HS_lambda as HS_L
  10. import numpy as np
  11. def Float(IN,si = float,n = True):#Float筛选系统
  12. x = []
  13. for i in IN:
  14. try:
  15. if si(i) == si(0) and n: continue
  16. x.append(si(i))
  17. except ValueError:
  18. pass
  19. return x
  20. def Fucn_Save():#导出CSV
  21. try:
  22. succ = HS.Out()#是否成功
  23. if not succ:
  24. raise Exception
  25. addNews('CSV导出成功')
  26. except:
  27. addNews('CSV导出失败')
  28. def Fucn_Numpy():#生成表格
  29. global HS,Pr_BOX
  30. try:
  31. Pr_BOX.delete(0, tkinter.END)
  32. Pr_BOX.insert(tkinter.END,*HS.returnList())
  33. addNews('表格创建成功')
  34. except:
  35. addNews('无法创建表格')
  36. def Change_Sympy(c):
  37. try:
  38. Name = {'Pi': sympy.pi, 'e': sympy.E, 'log': sympy.log,
  39. 'sin': sympy.sin, 'cos': sympy.cos, 'tan': sympy.tan,
  40. 'cot': lambda x: 1 / sympy.tan(x), 'csc': lambda x: 1 / sympy.sin(x),
  41. 'sec': lambda x: 1 / sympy.cos(x), 'sinh': sympy.sinh, 'cosh': sympy.cosh,
  42. 'tanh': sympy.tanh, 'asin': sympy.asin, 'acos': sympy.acos,
  43. 'atan': sympy.atan}
  44. ans = eval(c, Name)
  45. return ans,True
  46. except:
  47. return None,False
  48. def Change_S(c):
  49. get = Change_Sympy(c)
  50. if not get[1]:
  51. get[0] = c
  52. return get[0]
  53. def Check_Center_of_symmetry():
  54. global HS,YC_Input, YC_BOX,XZ_JD
  55. a,must = Change_Sympy(XZ_JD.get())
  56. try:
  57. G = HS.Check_Center_of_symmetry(Change_S(YC_Input.get()),addNews,a)
  58. if G[1]:
  59. YC_BOX.insert(tkinter.END,G[1])
  60. addNews('预测完成')
  61. else:
  62. raise Exception
  63. except:
  64. addNews('预测失败')
  65. def Check_Symmetry_axis():
  66. global HS,YC_Input, YC_BOX,XZ_JD
  67. a,must = Change_Sympy(XZ_JD.get())
  68. try:
  69. G = HS.Check_Symmetry_axis(Change_S(YC_Input.get()),addNews,a)
  70. if G[1]:
  71. YC_BOX.insert(tkinter.END,G[1])
  72. addNews('预测完成')
  73. else:
  74. raise Exception
  75. except:
  76. addNews('预测失败')
  77. def Check_Periodic():
  78. global HS,YC_Input, YC_BOX,XZ_JD
  79. a,must = Change_Sympy(XZ_JD.get())
  80. try:
  81. G = HS.Check_Periodic(Change_S(YC_Input.get()),addNews,a)
  82. if G[1]:
  83. YC_BOX.insert(tkinter.END,G[1])
  84. addNews('预测完成')
  85. else:
  86. raise Exception
  87. except:
  88. addNews('预测失败')
  89. def Check_Monotonic():
  90. global HS,YC_Input, YC_BOX,XZ_JD
  91. a,must = Change_Sympy(XZ_JD.get())
  92. try:
  93. G = HS.Check_Monotonic(YC_Input.get(),addNews,a)
  94. if G[1]:
  95. YC_BOX.insert(tkinter.END,G[1])
  96. addNews('预测完成')
  97. else:
  98. raise Exception
  99. except:
  100. addNews('预测失败')
  101. def Cul_Y_Clear():
  102. global HS
  103. try:
  104. if tkinter.messagebox.askokcancel('提示', f'确定删除{HS}的记忆吗?'):
  105. R_cul.delete(0, tkinter.END)
  106. HS.Clear_Memory()
  107. addNews('删除完毕')
  108. else:
  109. addNews('删除取消')
  110. except:
  111. addNews('删除失败')
  112. def Cul_Y_YC():#显示xy
  113. global HS,R_cul
  114. try:
  115. R_cul.delete(0, tkinter.END)
  116. HS.YC_On_Off()
  117. addNews('已清空卡槽')
  118. except:
  119. addNews('隐藏(显示)失败')
  120. def Cul_Y_Check():#显示xy
  121. global HS,R_cul
  122. try:
  123. Fucn = HS[lb.curselection()[0]]
  124. R_cul.delete(0, tkinter.END)
  125. m_x,m_y = Fucn.getMemory()
  126. answer = []
  127. for i in range(len(m_x)):
  128. answer.append(f'x={m_x[i]} -> y={m_y[i]}')
  129. R_cul.insert(tkinter.END, *answer)
  130. addNews('输出完成')
  131. except:
  132. addNews('操作失败')
  133. def Cul_X_TD():
  134. global HS,Xcul_TD_Input, Xcul_TD_CS, R_cul
  135. try:
  136. addNews('计算过程程序可能无响应')
  137. R_cul.delete(0, tkinter.END)#清空
  138. E = []
  139. for i in Xcul_TD_CS:
  140. E.append(i.get())
  141. addNews('系统运算中')
  142. answer = HS.Iterative_method_Of_Huan(Xcul_TD_Input.get(),*E)
  143. if answer[1] != None:
  144. R_cul.insert(tkinter.END, answer[0])
  145. addNews('系统运算完成')
  146. else:addNews('系统运算无结果')
  147. except :
  148. addNews('系统运算失败,请注意参数设置')
  149. def Cul_Y():
  150. global Ycul_Input,HS,R_cul
  151. try:
  152. addNews('计算过程程序可能无响应')
  153. R_cul.delete(0, tkinter.END)
  154. x = Ycul_Input.get().split(',')
  155. answer = HS.Cul_Y(x)
  156. if answer != []:
  157. R_cul.insert(tkinter.END, *answer)
  158. addNews('系统运算完毕')
  159. else:
  160. addNews('系统运算无结果')
  161. except:
  162. addNews('计算失败')
  163. def Cul_X_Sympy():
  164. global Xcul_DS_Input,HS,R_cul
  165. try:
  166. addNews('计算过程程序可能无响应')
  167. R_cul.delete(0, tkinter.END)
  168. x = Xcul_DS_Input.get().split(',')
  169. answer = []
  170. for i in x:
  171. answer += HS.Sympy_Cul(i)[0]
  172. if answer != []:
  173. R_cul.insert(tkinter.END, *answer)
  174. addNews('系统运算完毕')
  175. else:
  176. addNews('系统运算无结果')
  177. except:
  178. addNews('计算失败')
  179. def Cul_DS():
  180. global DScul_Input,HS,R_cul,DScul_JD_Input
  181. try:
  182. addNews('计算过程程序可能无响应')
  183. R_cul.delete(0, tkinter.END)
  184. x = DScul_Input.get().split(',')
  185. JD = DScul_JD_Input.get()
  186. answer = []
  187. for i in x:
  188. get = HS.Sympy_DHS(i,JD)[0]
  189. if get != None:
  190. answer.append(get)
  191. if answer != []:
  192. R_cul.insert(tkinter.END, *answer)
  193. addNews('系统运算完毕')
  194. else:
  195. addNews('系统运算无结果')
  196. except IndexError:
  197. addNews('计算失败')
  198. def Cul_DS_BJ():
  199. global DScul_Input,HS,R_cul,DScul_JD_Input
  200. try:
  201. addNews('计算过程程序可能无响应')
  202. R_cul.delete(0, tkinter.END)
  203. x = DScul_Input.get().split(',')
  204. JD = DScul_JD_Input.get()
  205. answer = []
  206. for i in x:
  207. get = HS.Sympy_DHS(i,JD,True)[0]
  208. if get != None:
  209. answer.append(get)
  210. if answer != []:
  211. R_cul.insert(tkinter.END, *answer)
  212. addNews('系统运算完毕')
  213. else:
  214. addNews('系统运算无结果')
  215. except IndexError:
  216. addNews('计算失败')
  217. def Cul_X():
  218. global Xcul_Input, Xcul_CS,HS,R_cul
  219. try:
  220. addNews('计算过程程序可能无响应')
  221. R_cul.delete(0, tkinter.END)#清空
  222. y = Xcul_Input.get().split(',')#拆解输入
  223. E = [100,0.0001,0.1,0.5,False,True,1000,0.1,0.1,False,None]
  224. for i in range(11):
  225. try:
  226. if i in (4,5,9):
  227. a = Xcul_CS[i].get()
  228. else:
  229. a = float(Xcul_CS[i].get())
  230. E[i] = a
  231. except:
  232. pass
  233. answer = []
  234. addNews('系统运算中')
  235. for i in y:
  236. try:
  237. answer += HS.Cul_dichotomy(float(i),*E)[0]
  238. except:pass
  239. if answer:
  240. addNews('系统运算完成')
  241. R_cul.insert(tkinter.END, *answer)
  242. else:addNews('系统运算无结果')
  243. except :
  244. addNews('系统运算失败')
  245. def Fucn_XZ():
  246. global HS,lb,XZ_BOX,XZ_JD
  247. try:
  248. a, must = Change_Sympy(XZ_JD.get())
  249. addNews('预测过程程序可能无响应')
  250. XZ_BOX.delete(0, tkinter.END)
  251. answer = HS.Nature(addNews,True,a,must)
  252. XZ_BOX.insert(tkinter.END, *answer)
  253. addNews('性质预测完成')
  254. except IndexError:
  255. addNews('性质预测失败')
  256. def Fucn_Draw():
  257. global XZ_Input,XZstart_Input,XZend_Input,XZkd_Input,YZ_Input,YZstart_Input,YZend_Input,YZkd_Input
  258. global Xlimstart_Input,Xlimend_Input,Ylimstart_Input,Ylimend_Input
  259. global HS,fig,Point_Draw, Best_Draw, Test_Draw,Draw_BOX,ZL_Input
  260. try:
  261. Draw_Type = Draw_BOX.curselection()[0]
  262. except:
  263. Draw_Type = 0
  264. #画板创造
  265. addNews('生成绘制取...')
  266. fig = plt.figure(num='CoTan函数') # 定义一个图像窗口
  267. if Draw_Type in (0,1,2,3,8,9):
  268. plt.grid(True,ls='--') # 显示网格(不能放到后面,因为后面调整成为了笛卡尔坐标系)
  269. ax = plt.gca()
  270. def init():
  271. if Draw_Type in (0,2,4,6,8):
  272. ax.spines['right'].set_color('none')
  273. ax.spines['top'].set_color('none')
  274. ax.xaxis.set_ticks_position('bottom')
  275. ax.yaxis.set_ticks_position('left')
  276. ax.spines['bottom'].set_position(('data', 0))# 设置x轴, y轴在(0, 0)的位置
  277. ax.spines['left'].set_position(('data', 0))
  278. #检测x
  279. try:
  280. if XZ_Input.get()[0] == 'c':#如果输入函数cx#-10#10#1#1
  281. _HS = [XZ_Input.get()[1:],XZstart_Input.get(),XZend_Input.get(),XZkd_Input.get(),2]#第一部分HS,第二部分S,第三部分E,第四部分KD,第五部分JD
  282. P = ['x',-10,10,1,2]#保护系统
  283. try:
  284. P[0] = _HS[0]
  285. P[1] = int(_HS[1])
  286. P[2] = int(_HS[2])
  287. P[3] = int(_HS[3])
  288. P[4] = int(_HS[4])
  289. except:#迭代匹配直到出现错误
  290. pass
  291. _HS = P
  292. x = Float(HS_L(_HS[0],'x','',_HS[1],_HS[2],_HS[3],_HS[4]).Cul()[1])#取y
  293. ax.set_xticks(x)
  294. elif XZ_Input.get()[0] == 'y':#输入函数y
  295. #不错要错误捕捉,外围有个大的捕捉
  296. x = abs(int(XZstart_Input.get()))
  297. x_major_locator=plt.MultipleLocator(x)
  298. ax.xaxis.set_major_locator(x_major_locator)
  299. else:#输入纯数字
  300. x = Float(XZ_Input.get().split(','))
  301. ax.set_xticks(x)
  302. except:
  303. x_major_locator = plt.MultipleLocator(2)
  304. ax.xaxis.set_major_locator(x_major_locator)
  305. #检测y
  306. try:#意外捕捉
  307. if YZ_Input.get()[0] == 'c': # 如果输入函数cx#-10#10#1#1
  308. _HS = [YZ_Input.get()[1:],YZstart_Input.get(),YZend_Input.get(),YZkd_Input.get(),2] # 第一部分HS,第二部分S,第三部分E,第四部分KD,第五部分JD
  309. P = ['x', -10, 10, 1, 2] # 保护系统
  310. try:
  311. P[0] = _HS[0]
  312. P[1] = int(_HS[1])
  313. P[2] = int(_HS[2])
  314. P[3] = int(_HS[3])
  315. P[4] = int(_HS[4])
  316. except: # 迭代匹配直到出现错误
  317. pass
  318. _HS = P
  319. y = Float(HS_L(_HS[0], 'y', '', _HS[1], _HS[2], _HS[3], _HS[4]).Cul()[1]) # 取y
  320. ax.set_yticks(y)
  321. elif YZ_Input.get()[0] == 'y': # 输入函数y
  322. y = abs(int(YZstart_Input.get()))
  323. y_major_locator = plt.MultipleLocator(y)
  324. ax.yaxis.set_major_locator(y_major_locator)
  325. else:
  326. y = Float(YZ_Input.get().split(','))
  327. ax.set_yticks(y)
  328. except:
  329. y_major_locator = plt.MultipleLocator(2)
  330. ax.yaxis.set_major_locator(y_major_locator)
  331. #极限设计
  332. try:
  333. xlim_IN = Float([Xlimstart_Input.get(),Xlimend_Input.get()],si=int,n=False)
  334. ylim_IN = Float([Ylimstart_Input.get(),Ylimend_Input.get()],si=int,n=False)
  335. try:_xlim = [xlim_IN[0], xlim_IN[1]]
  336. except:_xlim = [-10,10]
  337. try:_ylim = [ylim_IN[0], ylim_IN[1]]
  338. except:_ylim = _xlim
  339. except:
  340. _xlim = [-10, 10]
  341. _ylim = [-10,10]
  342. _xlim.sort()
  343. _ylim.sort()
  344. ax.set_xlim(_xlim)
  345. ax.set_ylim(_ylim)
  346. global text_x,text_y
  347. text_x = _xlim[0] + abs(_xlim[0]) * 0.01
  348. text_y = _ylim[1] - abs(_ylim[1]) * 0.01
  349. init()
  350. #函数绘图系统
  351. addNews('图像绘制中...')
  352. if HS == None:return False
  353. if Draw_Type in (0,1,4,5):
  354. #绘制曲线
  355. get = HS.Draw_Cul()
  356. fx = get[0]
  357. fy = get[1]
  358. Func_label = get[2]
  359. View = get[3]
  360. First = True
  361. for i in range(len(fx)):
  362. x = fx[i]
  363. y = fy[i]
  364. if First:
  365. plt.plot(x, y,View,label = Func_label) # plot()画出曲线
  366. First = False
  367. else:
  368. plt.plot(x, y, View)
  369. #绘制记忆点
  370. get = HS.getMemory()
  371. m_x = get[0]
  372. m_y = get[1]
  373. max_x, max_y, min_x, min_y = HS.Best_value()
  374. if Point_Draw.get():
  375. plt.plot(m_x, m_y, View[0]+'o',label=f'Point of {Func_label}') # 画出一些点
  376. len_x = sorted(list(set(m_x)))#去除list重复项目
  377. JZD = max_x + min_x
  378. if Test_Draw.get():
  379. o_x = None
  380. for i in range(len(len_x)):
  381. if i in JZD:continue#去除极值点
  382. _x = len_x[i]#x
  383. if o_x == None or abs(_x - o_x) >= 1:#确保位置
  384. num = m_x.index(_x)#y的座位
  385. _y = m_y[num]
  386. plt.text(_x,_y,f'({_x},{int(_y)})', fontdict={'size': '10', 'color':'b'})# 标出坐标
  387. o_x = _x
  388. if Best_Draw.get():
  389. o_x = None
  390. n_max = []
  391. for i in range(len(max_x)):#画出最大值
  392. _x = max_x[i]
  393. if o_x == None or abs(_x - o_x) >= 1: # 确保位置
  394. if Test_Draw.get():plt.text(_x-1, max_y, f'max:({_x},{int(max_y)})', fontdict={'size': '10', 'color': 'b'}) # 标出坐标
  395. n_max.append(_x)
  396. o_x = _x
  397. o_x = None
  398. n_min = []
  399. for i in range(len(min_x)):#画出最小值
  400. _x = min_x[i]
  401. if o_x == None or abs(_x - o_x) >= 1:
  402. n_min.append(_x)
  403. if Test_Draw.get():plt.text(_x-1, min_y, f'min:({_x},{int(min_y)})', fontdict={'size': '10', 'color': 'b'}) # 标出坐标
  404. o_x = _x
  405. plt.plot(n_min, [min_y] * len(n_min), View[0] + 'o') # 画出一些点
  406. plt.plot(n_max, [max_y] * len(n_max), View[0] + 'o') # 画出一些点
  407. plt.legend() # 显示图示
  408. elif Draw_Type in (8,9):
  409. get = HS.Cul()
  410. x = get[0]
  411. y = get[1]
  412. l = len(x)
  413. global xdata, ydata
  414. xdata = []
  415. ydata = []
  416. Func_label = get[2]
  417. View = get[3]
  418. ln = ax.plot([], [], View,label=Func_label,animated=False)[0]
  419. text = plt.text(text_x, text_y, '', fontdict={'size': '10', 'color': 'b'})
  420. def _init():
  421. init()
  422. return ln,text
  423. def update(n):
  424. global xdata,ydata
  425. if n == 0:
  426. xdata = []
  427. ydata = []
  428. xdata.append(x[n])
  429. ydata.append(y[n])
  430. text.set_text(f'x={x[n]},y={y[n]}')
  431. ln.set_data(xdata, ydata)
  432. return ln,text
  433. try:#自定义帧率
  434. ZL = int(ZL_Input.get())
  435. except:
  436. ZL = 100
  437. ani = FuncAnimation(fig, update, frames=l,init_func=_init, interval=ZL,blit=False,repeat_delay=3000)#动态绘图
  438. elif Draw_Type in (2,3,6,7):
  439. text = plt.text(text_x, text_y, '', fontdict={'size': '10', 'color': 'b'})
  440. HS_List = HS.Return_Son()
  441. pr_List = []
  442. l = len(HS_List)
  443. m = []#每个群组中fx分类的个数
  444. for i in HS_List:#预先生成函数
  445. addNews(f'迭代计算中...(共{l}次)')
  446. get = i.Draw_Cul()
  447. m.append(len(get[0]))
  448. pr_List.append(get)
  449. pr_List += pr_List[::-1]
  450. ln_list = [text]
  451. for i in range(max(m)):
  452. ln_list.append(ax.plot([], [], pr_List[0][3], animated=False)[0])#创建足够的i
  453. l = len(pr_List)
  454. def _init():
  455. init()
  456. text.set_text('')
  457. return None
  458. def update(n):
  459. get = pr_List[n-1]
  460. ln_list[0].set_text(get[2])
  461. for i in range(max(m)):
  462. try:
  463. x = get[0][i]
  464. y = get[1][i]
  465. ln_list[i+1].set_data(x, y)
  466. except:
  467. ln_list[i+1].set_data([],[])
  468. return ln_list
  469. try:#自定义帧率
  470. ZL = int(ZL_Input.get())
  471. except:
  472. ZL = 100
  473. ani = FuncAnimation(fig, update, frames=l,init_func=_init, interval=ZL,blit=False)#动态绘图
  474. addNews('绘制完毕')
  475. plt.show() # 显示图像
  476. return True
  477. def Add_HS():
  478. global Func_Input, start_Input, end_Input, kd_Input, JD_Input, FuncName_Input, FuncView_Input,View_C,View_Co,HS,top
  479. global a_MR, a_start, a_end, a_kd
  480. getHS = Func_Input.get().replace(' ', '')
  481. if getHS == '':
  482. addNews('应用失败')
  483. return None
  484. X_I = [-10,10,0.1,2,1,-10,10,1]
  485. get = [start_Input,end_Input,kd_Input,JD_Input,a_MR, a_start, a_end, a_kd]
  486. #参数的处理
  487. try:
  488. c = kd_Input.get().replace(' ', '')
  489. if c[0] == 'H':
  490. Name = {'Pi': sympy.pi, 'e': sympy.E, 'log': sympy.log,
  491. 'sin': sympy.sin, 'cos': sympy.cos, 'tan': sympy.tan,
  492. 'cot': lambda x: 1 / sympy.tan(x), 'csc': lambda x: 1 / sympy.sin(x),
  493. 'sec': lambda x: 1 / sympy.cos(x), 'sinh': sympy.sinh, 'cosh': sympy.cosh,
  494. 'tanh': sympy.tanh, 'asin': sympy.asin, 'acos': sympy.acos,
  495. 'atan': sympy.atan}
  496. kd = eval(c[1:],Name)
  497. else:raise Exception
  498. except:
  499. kd = None
  500. for i in range(8):
  501. try:
  502. a = float(get[i].get())
  503. X_I[i] = a
  504. except:
  505. pass
  506. if kd != None:X_I[2] = kd
  507. #View的处理
  508. view = FuncView_Input.get().split('#')
  509. try:
  510. if view[0] not in View_Co:view[0] = 'b'
  511. v_2 = View_C.get(view[1], '-')
  512. except:
  513. view = ['','']
  514. view[0] = random.choice(View_Co)
  515. v_2 = '-'
  516. V = view[0] + v_2
  517. #Name的处理
  518. name = FuncName_Input.get().replace(' ', '')
  519. if name == '':name = getHS
  520. try:
  521. HS = HS_L(getHS,name,V,*X_I,c_Son = True)
  522. addNews('应用成功')
  523. top.title(f'CoTan函数工厂 {HS}')
  524. except:
  525. addNews('应用失败')
  526. def addNews(News):
  527. global News_BOX,T,top
  528. T += 1
  529. News = str(News)
  530. News_BOX.insert(0, News+f'({T})')
  531. top.update()
  532. def Advanced_Control():#H_S-默认函数GF-关闭时询问返回函数
  533. global View_C,View_Co,HS,T,top
  534. HS = None
  535. T = 0
  536. View_C = {'实线':'-',
  537. '短横线':'--',
  538. '点划线':'-,',
  539. '虚线':':',
  540. '点标记':'.',
  541. '圆标记':'o',
  542. '倒三角':'v',
  543. '正三角':'^',
  544. '左三角':'&lt',
  545. '下箭头':'1',
  546. '上箭头':'2',
  547. '左箭头':'3',
  548. '右箭头':'4',
  549. '正方形':'s',
  550. '五边形':'p',
  551. '星形':'*',
  552. '六边形':'h',
  553. '六边形2':'H',
  554. '+号':'+',
  555. 'X标记':'x',}#函数样式翻译表
  556. View_Co = ['g','r','c','m','y','k']
  557. # top = tkinter.Tk() # 设置屏幕
  558. top = DragWindow()
  559. bg = '#FFFAFA'#主颜色
  560. bbg = '#FFFAFA'#按钮颜色
  561. fg = '#000000'#文字颜色
  562. top["bg"] = bg
  563. top.title('CoTan函数工厂')
  564. top.resizable(width=False, height=False)
  565. top.geometry('+10+10')
  566. FONT = ('Font\ZKST.ttf', 11)#设置字体
  567. rcParams['font.family'] = 'simhei'
  568. rcParams['axes.unicode_minus']=False
  569. width_B = 13#标准宽度
  570. height_B=2
  571. a_y = 0
  572. a_x = 1
  573. global Func_Input,start_Input,end_Input,kd_Input,JD_Input,FuncName_Input,FuncView_Input
  574. tkinter.Label(top, text='输入解析式:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  575. Func_Input = tkinter.Entry(top, width=width_B * 2)
  576. Func_Input.grid(column=a_x+1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  577. a_y += 1
  578. tkinter.Label(top, text='定义域前端点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  579. start_Input = tkinter.Entry(top, width=width_B * 2)
  580. start_Input.grid(column=a_x+1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  581. a_y += 1
  582. tkinter.Label(top, text='定义域后端点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  583. end_Input = tkinter.Entry(top, width=width_B * 2)
  584. end_Input.grid(column=a_x+1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  585. a_y += 1
  586. tkinter.Label(top, text='函数绘制跨度:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  587. kd_Input = tkinter.Entry(top, width=width_B * 2)
  588. kd_Input.grid(column=a_x+1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  589. a_y += 1
  590. tkinter.Label(top, text='函数计算精度:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  591. JD_Input = tkinter.Entry(top, width=width_B * 2)
  592. JD_Input.grid(column=a_x+1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  593. a_y += 1
  594. tkinter.Label(top, text='函数名字:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  595. FuncName_Input = tkinter.Entry(top, width=width_B * 2)
  596. FuncName_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  597. a_y += 1
  598. tkinter.Label(top, text='函数视图:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  599. FuncView_Input = tkinter.Entry(top, width=width_B * 2)
  600. FuncView_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  601. global a_MR,a_start,a_end,a_kd
  602. a_y += 1
  603. tkinter.Label(top, text='常量a默认值:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  604. a_MR = tkinter.Entry(top, width=width_B * 2)
  605. a_MR.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  606. a_y += 1
  607. tkinter.Label(top, text='常量a起点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  608. a_start = tkinter.Entry(top, width=width_B * 2)
  609. a_start.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  610. a_y += 1
  611. tkinter.Label(top, text='常量a终点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  612. a_end = tkinter.Entry(top, width=width_B * 2)
  613. a_end.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  614. a_y += 1
  615. tkinter.Label(top, text='常量a跨度:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  616. a_kd = tkinter.Entry(top, width=width_B * 2)
  617. a_kd.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  618. a_y += 1
  619. tkinter.Button(top,bg = bbg,fg = fg, text='应用函数',command=Add_HS, font=FONT, width=width_B, height=height_B).grid(column=a_x,row=a_y,sticky=tkinter.E + tkinter.W) # 添加函数
  620. tkinter.Button(top,bg = bbg,fg = fg, text='绘制图像',command = Fucn_Draw, font=FONT, width=width_B, height=height_B).grid(column=a_x+1, row=a_y,sticky=tkinter.E + tkinter.W)
  621. tkinter.Button(top,bg = bbg,fg = fg, text='性质预测', command = Fucn_XZ,font=FONT, width=width_B, height=height_B).grid(column=a_x+2, row=a_y,sticky=tkinter.E + tkinter.W) # 添加函数
  622. global XZ_BOX,XZ_JD
  623. a_y += 1
  624. tkinter.Label(top, text='预测精度:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  625. XZ_JD = tkinter.Entry(top, width=width_B * 2)
  626. XZ_JD.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  627. a_y += 1
  628. # 显示函数的xy
  629. XZ_BOX = tkinter.Listbox(top, width=width_B * 3) # 暂时不启用多选
  630. XZ_BOX.grid(column=a_x, row=a_y, columnspan=3, rowspan=9, sticky=tkinter.S + tkinter.N + tkinter.E + tkinter.W)
  631. a_x += 3
  632. tkinter.Label(top, text='',bg = bg,fg = fg, font=FONT, width=1).grid(column=a_x, row=0) # 设置说明
  633. #第二排的开始
  634. global XZ_Input,XZstart_Input,XZend_Input,XZkd_Input,YZ_Input,YZstart_Input,YZend_Input,YZkd_Input
  635. global Xlimstart_Input,Xlimend_Input,Ylimstart_Input,Ylimend_Input
  636. a_x += 1
  637. a_y = 0
  638. tkinter.Label(top, text='X轴刻度声明:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  639. XZ_Input = tkinter.Entry(top, width=width_B * 2)
  640. XZ_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  641. a_y += 1
  642. tkinter.Label(top, text='X轴刻度起点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  643. XZstart_Input = tkinter.Entry(top, width=width_B * 2)
  644. XZstart_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  645. a_y += 1
  646. tkinter.Label(top, text='X轴刻度终点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  647. XZend_Input = tkinter.Entry(top, width=width_B * 2)
  648. XZend_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  649. a_y += 1
  650. tkinter.Label(top, text='X轴刻度间隔:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  651. XZkd_Input = tkinter.Entry(top, width=width_B * 2)
  652. XZkd_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  653. a_y += 1
  654. tkinter.Label(top, text='Y轴刻度声明:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  655. YZ_Input = tkinter.Entry(top, width=width_B * 2)
  656. YZ_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  657. a_y += 1
  658. tkinter.Label(top, text='Y轴刻度起点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  659. YZstart_Input = tkinter.Entry(top, width=width_B * 2)
  660. YZstart_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  661. a_y += 1
  662. tkinter.Label(top, text='Y轴刻度终点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  663. YZend_Input = tkinter.Entry(top, width=width_B * 2)
  664. YZend_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  665. a_y += 1
  666. tkinter.Label(top, text='Y轴刻度间隔:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  667. YZkd_Input = tkinter.Entry(top, width=width_B * 2)
  668. YZkd_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  669. a_y += 1
  670. tkinter.Label(top, text='X轴显示起点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  671. Xlimstart_Input = tkinter.Entry(top, width=width_B * 2)
  672. Xlimstart_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  673. a_y += 1
  674. tkinter.Label(top, text='X轴显示终点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  675. Xlimend_Input = tkinter.Entry(top, width=width_B * 2)
  676. Xlimend_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  677. a_y += 1
  678. tkinter.Label(top, text='Y轴显示起点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  679. Ylimstart_Input = tkinter.Entry(top, width=width_B * 2)
  680. Ylimstart_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  681. a_y += 1
  682. tkinter.Label(top, text='Y轴显示终点:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  683. Ylimend_Input = tkinter.Entry(top, width=width_B * 2)
  684. Ylimend_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  685. global ZL_Input
  686. a_y += 1
  687. tkinter.Label(top, text='帧率(帧/ms):', bg=bg, fg=fg, font=FONT, width=width_B, height=height_B).grid(column=a_x,
  688. row=a_y) # 设置说明
  689. ZL_Input = tkinter.Entry(top, width=width_B * 2)
  690. ZL_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  691. global Point_Draw,Best_Draw,Test_Draw
  692. a_y += 1
  693. Point_Draw = tkinter.IntVar()
  694. Best_Draw = tkinter.IntVar()
  695. Test_Draw = tkinter.IntVar()
  696. tkinter.Checkbutton(top,bg = bg,fg = fg,activebackground=bg,activeforeground=fg,selectcolor=bg, text="显示记忆点", variable=Point_Draw).grid(column=a_x, row=a_y,
  697. sticky=tkinter.E + tkinter.W)
  698. tkinter.Checkbutton(top,bg = bg,fg = fg,activebackground=bg,activeforeground=fg,selectcolor=bg, text="显示最值", variable=Best_Draw).grid(column=a_x+1, row=a_y,
  699. sticky=tkinter.E + tkinter.W)
  700. tkinter.Checkbutton(top,bg = bg,fg = fg,activebackground=bg,activeforeground=fg,selectcolor=bg, text="显示文字", variable=Test_Draw).grid(column=a_x+2, row=a_y,
  701. sticky=tkinter.E + tkinter.W)
  702. global News_BOX,Draw_BOX
  703. a_y += 1
  704. # 显示函数的xy
  705. Draw_BOX = tkinter.Listbox(top, width=width_B * 3,height=height_B*4) # 暂时不启用多选
  706. Draw_BOX.grid(column=a_x, row=a_y, columnspan=3, rowspan=3, sticky=tkinter.S + tkinter.N + tkinter.E + tkinter.W)
  707. Draw_BOX.insert(tkinter.END, *['笛卡尔坐标系静态图像(默认)','矩形坐标系静态图像','笛卡尔坐标系动态图像','矩形坐标系动态图像',
  708. '笛卡尔坐标系静态图像(无线框)','矩形坐标系静态图像(无线框)','笛卡尔坐标系动态图像(无线框)',
  709. '矩形坐标系动态图像(无线框)','笛卡尔坐标系动态画图','矩形坐标系动态画图'])
  710. a_y += 3
  711. # 显示函数的xy
  712. News_BOX = tkinter.Listbox(top, width=width_B * 3,height=height_B*2) # 暂时不启用多选
  713. News_BOX.grid(column=a_x, row=a_y, columnspan=3, rowspan=2, sticky=tkinter.S + tkinter.N + tkinter.E + tkinter.W)
  714. a_x += 3
  715. tkinter.Label(top, text='',bg = bg,fg = fg, font=FONT, width=1).grid(column=a_x, row=0) # 设置说明
  716. global Ycul_Input,Xcul_Input,Xcul_CS,Xcul_TD_Input,Xcul_TD_CS,R_cul
  717. a_x += 1
  718. a_y = 0
  719. tkinter.Label(top, text='计算(y):',bg = bg,fg = fg,font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  720. Ycul_Input = tkinter.Entry(top, width=width_B * 2)
  721. Ycul_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  722. a_y += 1
  723. tkinter.Label(top, text='二分法计算(x):',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  724. Xcul_Input = tkinter.Entry(top, width=width_B * 2)
  725. Xcul_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  726. Xcul_CS = []#二分法参数输入
  727. name_List = ['最大迭代数','计算精度','最值允许偏移量','零点最小间隔','减少计算','允许梯度计算','最大扩张深度','扩张限制','扩张偏移量','开启二级验证','二级验证程度']
  728. for i in range(11):
  729. a_y += 1
  730. Xcul_CS.append(tkinter.StringVar())
  731. tkinter.Label(top,bg = bg,fg = fg, text=name_List[i]+':', font=FONT, width=width_B, height=height_B).grid(column=a_x,
  732. row=a_y) # 设置说明
  733. tkinter.Entry(top, width=width_B * 2,textvariable=Xcul_CS[-1]).grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  734. a_y += 1
  735. tkinter.Label(top, text='梯度法计算(x):',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y) # 设置说明
  736. Xcul_TD_Input = tkinter.Entry(top, width=width_B * 2)
  737. Xcul_TD_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  738. Xcul_TD_CS = []#梯度法法参数输入
  739. name_List = ['梯度起点','梯度终点','计算深度','计算精度']
  740. for i in range(4):
  741. a_y += 1
  742. Xcul_TD_CS.append(tkinter.StringVar())
  743. tkinter.Label(top,bg = bg,fg = fg, text=name_List[i]+':', font=FONT, width=width_B, height=height_B).grid(column=a_x,
  744. row=a_y) # 设置说明
  745. tkinter.Entry(top, width=width_B * 2,textvariable=Xcul_TD_CS[-1]).grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  746. a_y += 1
  747. tkinter.Label(top, text='',bg = bg,fg = fg,height=1).grid(column=1, row=a_y) #底部
  748. a_x += 3
  749. tkinter.Label(top, text='',bg = bg,fg = fg, font=FONT, width=1).grid(column=a_x, row=0) # 设置说明
  750. global Xcul_DS_Input,DScul_Input,DScul_JD_Input
  751. a_x += 1
  752. a_y = 0
  753. tkinter.Label(top, text='代数法计算(x):', bg=bg, fg=fg, font=FONT, width=width_B, height=height_B).grid(column=a_x,
  754. row=a_y) # 设置说明
  755. Xcul_DS_Input = tkinter.Entry(top, width=width_B * 2)
  756. Xcul_DS_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  757. a_y += 1
  758. tkinter.Label(top, text='求(x)导数:', bg=bg, fg=fg, font=FONT, width=width_B, height=height_B).grid(column=a_x,
  759. row=a_y) # 设置说明
  760. DScul_Input = tkinter.Entry(top, width=width_B * 2)
  761. DScul_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  762. a_y += 1
  763. tkinter.Label(top, text='逼近求导精度:', bg=bg, fg=fg, font=FONT, width=width_B, height=height_B).grid(column=a_x,
  764. row=a_y) # 设置说明
  765. DScul_JD_Input = tkinter.Entry(top, width=width_B * 2)
  766. DScul_JD_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  767. a_y += 1
  768. tkinter.Button(top,bg = bbg,fg = fg, text='计算(y)',command = Cul_Y, font=FONT, width=width_B, height=height_B).grid(column=a_x,row=a_y) # 设置说明
  769. tkinter.Button(top,bg = bbg,fg = fg, text='二分法计算(x)',command = Cul_X, font=FONT, width=width_B, height=height_B).grid(column=a_x+1,row=a_y)
  770. tkinter.Button(top,bg = bbg,fg = fg, text='梯度法计算(x)',command = Cul_X_TD, font=FONT, width=width_B, height=height_B).grid(column=a_x+2,row=a_y)
  771. a_y += 1
  772. tkinter.Button(top,bg = bbg,fg = fg,text='代数法计算',command=Cul_X_Sympy,font=FONT,width=width_B,height=height_B).grid(column = a_x,row = a_y,sticky=tkinter.N + tkinter.E + tkinter.W)
  773. tkinter.Button(top,bg = bbg,fg = fg, text='逼近法导数计算',command=Cul_DS_BJ, font=FONT, width=width_B,height=height_B).grid(column=a_x+1,row=a_y,sticky=tkinter.N + tkinter.E + tkinter.W)
  774. tkinter.Button(top,bg = bbg,fg = fg,text='导数计算',command=Cul_DS,font=FONT,width=width_B,height=height_B).grid(column =a_x+2,row = a_y,sticky=tkinter.N + tkinter.E + tkinter.W)
  775. a_y += 1
  776. k = 5
  777. R_cul = tkinter.Listbox(top,height=height_B*(k-1)) # 暂时不启用多选
  778. R_cul.grid(column=a_x, row=a_y, columnspan=3,rowspan = k,sticky=tkinter.N + tkinter.E + tkinter.W)
  779. global YC_Input,YC_BOX
  780. a_y += k-1
  781. tkinter.Label(top, text='性质预测值:',bg = bg,fg = fg, font=FONT, width=width_B, height=height_B).grid(column=a_x, row=a_y, sticky=tkinter.N + tkinter.S) # 设置说明
  782. YC_Input = tkinter.Entry(top, width=width_B * 2)
  783. YC_Input.grid(column=a_x + 1, row=a_y, columnspan=2, sticky=tkinter.E + tkinter.W)
  784. a_y += 1
  785. tkinter.Button(top,bg = bbg,fg = fg,text='周期性',command = Check_Periodic,font=FONT,width=width_B,height=height_B).grid(column = a_x,row = a_y,sticky=tkinter.N + tkinter.E + tkinter.W)
  786. tkinter.Button(top,bg = bbg,fg = fg, text='对称轴',command = Check_Symmetry_axis, font=FONT, width=width_B,height=height_B).grid(column=a_x+1,row=a_y,sticky=tkinter.N + tkinter.E + tkinter.W)
  787. tkinter.Button(top,bg = bbg,fg = fg,text='对称中心',command = Check_Center_of_symmetry,font=FONT,width=width_B,height=height_B).grid(column =a_x+2,row = a_y,sticky=tkinter.N + tkinter.E + tkinter.W)
  788. a_y += 1
  789. tkinter.Button(top,bg = bbg,fg = fg,text='单调性',command = Check_Monotonic,font=FONT,width=width_B,height=height_B).grid(column =a_x,row = a_y, columnspan=3,sticky=tkinter.N + tkinter.E + tkinter.W)
  790. a_y += 1
  791. # 显示函数的xy
  792. YC_BOX = tkinter.Listbox(top, width=width_B*3,height=height_B*5) # 暂时不启用多选
  793. YC_BOX.grid(column=a_x, row=a_y, columnspan=3, rowspan=6, sticky=tkinter.S + tkinter.N + tkinter.E + tkinter.W)
  794. a_x += 3
  795. tkinter.Label(top, text='',bg = bg,fg = fg, font=FONT, width=1).grid(column=a_x, row=0) # 设置说明
  796. a_x += 1
  797. a_y = 0
  798. tkinter.Button(top,bg = bbg,fg = fg,text='生成表格',command=Fucn_Numpy,font=FONT,width=width_B*2,height=height_B).grid(column = a_x,row = a_y,columnspan=2)
  799. tkinter.Button(top,bg = bbg,fg = fg,text='导出表格',command=Fucn_Save,font=FONT,width=width_B,height=height_B).grid(column = a_x+2,row = a_y)
  800. global Pr_BOX
  801. a_y += 1
  802. #显示函数的xy
  803. Pr_BOX=tkinter.Listbox(top,width=width_B*3)#暂时不启用多选
  804. Pr_BOX.grid(column = a_x,row = a_y,columnspan = 3,rowspan =17,sticky = tkinter.S+tkinter.N+tkinter.E+tkinter.W)
  805. addNews('加载完毕')
  806. tkinter.mainloop()