TK.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. from tkinter.colorchooser import askcolor
  2. from tkinter.filedialog import asksaveasfile
  3. import tkinter.messagebox
  4. from CGB import TK_HS
  5. help_Wo='''
  6. *快捷键:
  7. d-不用点击左键画线(再次点击关闭)
  8. g-画直线(2)
  9. f-画填充矩阵3
  10. s-画矩阵边框4
  11. k-画横线5
  12. l-画竖线6
  13. j-画多段线7
  14. i-横线多段线打点(再次点击结束绘制)8
  15. u-竖线多段线打点(再次点击结束绘制)9
  16. h-横线和竖线多段线打点并由虚线标注(再次点击结束绘制)10
  17. q-绘制虚线11
  18. c-绘制填充圆形12
  19. v-绘制圆形边框(13)
  20. n和m-绘制多边形(14)
  21. n-再次点击完成填充多边形绘制(14)
  22. m-再次点击完成多边形边框绘制(14)
  23. o-捕捉坐标原点(请先点击功能快捷键)
  24. x-捕捉坐标x轴(请先点击功能快捷键并选择起点)
  25. y-捕捉坐标y轴(同上)
  26. b-关闭当前所有快捷键操作
  27. e-绘制填充椭圆(15)
  28. r-绘制椭圆边框(16)
  29. w-再次保存(前提是现在工具箱点击过一次保存)
  30. *鼠标操作:
  31. 左键-按下画曲线
  32. 中键-快捷键启动后,用于选择点
  33. 右键-打开工具箱
  34. *视图
  35. 顶部-显示鼠标坐标,按键点击模式,笔的大小,坐标系位置和颜色系统以及坐标系原点的位置(处于快捷键状态时,显示中键当前选择了的点)
  36. 底部-显示当前时间(处于快捷键状态时,显示快捷键提示mod:yes None xxx,其中yes表示快捷键d启动,None表示快捷键注释,xxx表示快捷功能解释)
  37. *工具箱操作:
  38. 选择颜色-画线颜色
  39. 选择增函数颜色-绘制函数时增函数颜色
  40. 选择减函数颜色-绘制函数时减函数颜色
  41. 选择笔的大小(刷子)-画线的粗细
  42. 清空-清空所有笔记并可以选择新的背景颜色
  43. 绘制坐标系-三点绘制坐标系(使用中键选择点)
  44. 保存-保存笔记为图片格式,保存一次后快捷键w可重复保存
  45. 绘制函数-绘制基本初等函数和字定义解析函数
  46. '''
  47. def GetZColor():
  48. global ZColo
  49. ZColo = askcolor(title='选择颜色')[0]
  50. def GetJColor():
  51. global JColo
  52. JColo = askcolor(title='选择颜色')[0]
  53. def GetColor():
  54. global colo
  55. colo = askcolor(title='选择颜色')[0]
  56. def getBC():
  57. global BC
  58. BC = tkinter.filedialog.asksaveasfilename(title='选择保存位置',filetypes=[("PNG", ".png")])
  59. if not BC:BC = None
  60. else:BC += '.png'
  61. def getBG():
  62. global BG_IM
  63. BG_IM = tkinter.filedialog.askopenfilename(title='选择载入图片',filetypes=[("PNG", ".png"),("JPG", ".jpg")])
  64. if not BG_IM: BG_IM = None
  65. def ChangePenSZ():
  66. global d
  67. if tkinter.messagebox.askokcancel('提示', '要切换到刷子吗(可当橡皮使用)'):d = 10
  68. def ChangePenB():
  69. global d
  70. if tkinter.messagebox.askokcancel('提示', '要切换到大笔吗'):d = 3
  71. def Set_d():
  72. global d,d_Input
  73. Input = d_Input.get().replace(' ', '')
  74. try:
  75. Input = int(Input)
  76. if tkinter.messagebox.askokcancel('提示', f'是否设定大小为{Input}(系统默认大小为:2)'):d = Input
  77. except:
  78. if tkinter.messagebox.askokcancel('提示', '设置失败,是否要切换到中笔吗'): d = 2
  79. def ChangePenZ():
  80. global d
  81. if tkinter.messagebox.askokcancel('提示', '要切换到中笔吗'):d = 2
  82. def ChangePenS():
  83. global d
  84. if tkinter.messagebox.askokcancel('提示', '要切换到小笔吗?'):d = 1
  85. def ZBX_XY():
  86. global XY
  87. if tkinter.messagebox.askokcancel('提示', '是否绘制坐标系,确定后返回草图界面任一点三点开始绘制(点击取消可撤销未执行的清空)'):
  88. XY = 1
  89. else:XY = None
  90. def ZBX_XY_XKD():
  91. global XY
  92. if tkinter.messagebox.askokcancel('提示', '是否绘制小跨度的坐标系,确定后返回草图界面任一点三点开始绘制(点击取消可撤销未执行的清空)'):
  93. XY = 2
  94. else:XY = None
  95. def ZBX_XY_DKD():
  96. global XY
  97. if tkinter.messagebox.askokcancel('提示', '是否绘制大跨度的坐标系,确定后返回草图界面任一点三点开始绘制(点击取消可撤销未执行的清空)'):
  98. XY = 3
  99. else:XY = None
  100. def Set_k():
  101. global XY,k,k_Input
  102. Input = k_Input.get().replace(' ', '')
  103. try:
  104. Input = int(Input)
  105. if tkinter.messagebox.askokcancel('提示', f'是否设定跨度为{Input}(跨度代表坐标系一个单位大小的实际像素,系统默认大跨度为:120)'):
  106. k = Input
  107. XY = 1
  108. else:
  109. XY = None
  110. k = None
  111. except:
  112. k = None
  113. if tkinter.messagebox.askokcancel('提示', '是否绘制大跨度的坐标系,确定后返回草图界面任一点三点开始绘制(点击取消可撤销未执行的清空)'):
  114. XY = 3
  115. else:
  116. XY = None
  117. def QK():
  118. global BG
  119. if tkinter.messagebox.askokcancel('提示', '是否清空草稿(点击取消可撤销未执行的清空)'):
  120. BG = askcolor(title='选择背景颜色')[0]
  121. else:BG = None
  122. def HS():
  123. global HS_List,closeable
  124. HS_List = TK_HS.CHS()
  125. def _help():
  126. global help_Wo
  127. tkinter.messagebox.showinfo(title='帮助', message=help_Wo)
  128. def close():#关闭屏幕事件
  129. global top
  130. try:TK_HS.TK_DoneHS.top.destroy()
  131. except:pass
  132. try:TK_HS.top.destroy()
  133. except:pass
  134. top.destroy()
  135. def CC():
  136. global colo#三个月还有这个一般v额u
  137. global ZColo,JColo
  138. global top#初始化屏幕
  139. global d
  140. global BG
  141. global XY
  142. global HS_List#绘制函数列表
  143. global BC#保存路径
  144. global k
  145. global d_Input,k_Input#定义Enter组件
  146. global BG_IM
  147. global closeable
  148. closeable = True
  149. BG_IM = None
  150. HS_List = {}
  151. XY = None
  152. BG = None
  153. d = None
  154. colo = None
  155. ZColo = None
  156. JColo = None
  157. BC = None
  158. w_b=20
  159. h_b=3
  160. k = None
  161. top = tkinter.Tk() # 设置屏幕
  162. top.title('')
  163. top.resizable(width=False, height=False)
  164. top.geometry(f'+10+10')
  165. tkinter.Button(top, text ="选择颜色", command = GetColor,width = w_b, height = h_b).pack()#选择颜色组件
  166. tkinter.Button(top, text="选择增函数颜色", command=GetZColor, width=w_b, height=1).pack() # 选择颜色组件
  167. tkinter.Button(top, text="选择减函数颜色", command=GetJColor, width=w_b, height=1).pack() # 选择颜色组件
  168. tkinter.Button(top, text="使用中笔(默认笔)", command=ChangePenZ, width=w_b, height=h_b).pack() # 切换笔
  169. tkinter.Button(top, text="使用大笔", command = ChangePenB,width = w_b, height = 1).pack() # 切换到大笔
  170. tkinter.Button(top, text="使用小笔", command=ChangePenS, width=w_b, height=1).pack() # 切换笔
  171. tkinter.Button(top, text="使用刷子", command=ChangePenSZ, width=w_b, height=1).pack() # 切换笔
  172. d_Input = tkinter.Entry(top, width=w_b-2)
  173. d_Input.pack(fill=tkinter.BOTH)
  174. tkinter.Button(top, text="使用自定义大小", command=Set_d, width=w_b, height=1).pack() # 切换笔
  175. tkinter.Button(top, text="清空草稿", command=QK, width=w_b, height=h_b).pack() # 填充背景
  176. tkinter.Button(top, text="绘制坐标系", command=ZBX_XY, width=w_b, height=h_b).pack() # 绘制坐标系
  177. tkinter.Button(top, text="绘制坐标系(小跨度)", command=ZBX_XY_XKD, width=w_b, height=1).pack() # 绘制坐标系
  178. tkinter.Button(top, text="绘制坐标系(大跨度)", command=ZBX_XY_DKD, width=w_b, height=1).pack() # 绘制坐标系
  179. k_Input = tkinter.Entry(top, width=w_b-2)
  180. k_Input.pack(fill=tkinter.BOTH)
  181. tkinter.Button(top, text="使用自定义跨度", command=Set_k, width=w_b, height=1).pack() # 切换笔
  182. tkinter.Button(top, text="绘制函数", command=HS, width=w_b, height=h_b).pack()
  183. tkinter.Button(top, text="保存", command=getBC, width=w_b, height=1).pack()
  184. tkinter.Button(top, text="载入", command=getBG, width=w_b, height=1).pack()
  185. tkinter.Button(top, text="帮助", command=_help, width=w_b, height=1).pack()#help是系统保留关键词,用_help代替
  186. top.protocol('WM_DELETE_WINDOW',close)
  187. top.mainloop()
  188. return [colo,d,BG,XY,HS_List,BC,ZColo,JColo,k,BG_IM]
  189. #[0]-笔的颜色
  190. #[1]-笔的大小
  191. #[2]-背景填充
  192. #[3]-坐标系绘制
  193. #[4]-函数绘制
  194. #[5]-保存