鱼C论坛

 找回密码
 立即注册
查看: 3915|回复: 4

[已解决]tkinter中Button事件触发的问题

[复制链接]
发表于 2018-1-6 23:51:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 sahinzheng 于 2018-1-6 23:53 编辑
  1. #导入tkinter模块
  2. import tkinter

  3. tk = tkinter.Tk()
  4. #设置窗口标题
  5. tk.title("煤工业分析计算器")
  6. #设置窗口大小
  7. tk.geometry("540x220")

  8. #添加标签
  9. labelMad = tkinter.Label(tk,text="Mad")
  10. labelMad.place(x=10,y=10,width=50,height=25)

  11. labelAad = tkinter.Label(tk,text="Aad")
  12. labelAad.place(x=65,y=10,width=50,height=25)

  13. labelVad = tkinter.Label(tk,text="Vad")
  14. labelVad.place(x=120,y=10,width=50,height=25)

  15. labelFC = tkinter.Label(tk,text="FC")
  16. labelFC.place(x=175,y=10,width=50,height=25)

  17. labelQent_ad = tkinter.Label(tk,text="Qent.ad")
  18. labelQent_ad.place(x=230,y=10,width=50,height=25)

  19. labelAd = tkinter.Label(tk,text="Ad")
  20. labelAd.place(x=285,y=10,width=50,height=25)

  21. labelAd = tkinter.Label(tk,text="Ad")
  22. labelAd.place(x=285,y=10,width=50,height=25)

  23. labelVadf = tkinter.Label(tk,text="Vadf")
  24. labelVadf.place(x=340,y=10,width=50,height=25)

  25. labelVadf1 = tkinter.Label(tk,text="Vadf校")
  26. labelVadf1.place(x=400,y=10,width=50,height=25)

  27. labelAd1 = tkinter.Label(tk,text="Ad")
  28. labelAd1.place(x=460,y=10,width=50,height=25)

  29. labelVadf10 = tkinter.Label(tk,text="<10%")
  30. labelVadf10.place(x=460,y=35,width=50,height=25)

  31. labelVadf15 = tkinter.Label(tk,text="10-15%")
  32. labelVadf15.place(x=460,y=65,width=50,height=25)

  33. labelVadf20 = tkinter.Label(tk,text="15-20%")
  34. labelVadf20.place(x=460,y=95,width=50,height=25)

  35. labelVadf25 = tkinter.Label(tk,text="20-25%")
  36. labelVadf25.place(x=460,y=125,width=50,height=25)

  37. labelVadf30 = tkinter.Label(tk,text="25-30%")
  38. labelVadf30.place(x=460,y=155,width=50,height=25)

  39. labelVadf40 = tkinter.Label(tk,text="30-40%")
  40. labelVadf40.place(x=460,y=185,width=50,height=25)
  41. #添加文本框
  42. entryMad=tkinter.Entry(tk,text ="")
  43. entryMad.place(x=10,y=35,width=50,height=25)

  44. entryAad=tkinter.Entry(tk,text ="")
  45. entryAad.place(x=65,y=35,width=50,height=25)

  46. entryVad=tkinter.Entry(tk,text ="")
  47. entryVad.place(x=120,y=35,width=50,height=25)

  48. entryFC=tkinter.Entry(tk,text ="")
  49. entryFC.place(x=175,y=35,width=50,height=25)

  50. entryQent_ad=tkinter.Entry(tk,text ="")
  51. entryQent_ad.place(x=230,y=35,width=50,height=25)

  52. entryAd=tkinter.Entry(tk,text ="")
  53. entryAd.place(x=285,y=35,width=50,height=25)


  54. entryVadf=tkinter.Entry(tk,text ="")
  55. entryVadf.place(x=340,y=35,width=50,height=25)

  56. entryVadf10=tkinter.Entry(tk,text ="")
  57. entryVadf10.place(x=400,y=35,width=50,height=25)

  58. entryVadf15=tkinter.Entry(tk,text ="")
  59. entryVadf15.place(x=400,y=65,width=50,height=25)

  60. entryVadf20=tkinter.Entry(tk,text ="")
  61. entryVadf20.place(x=400,y=95,width=50,height=25)

  62. entryVadf25=tkinter.Entry(tk,text ="")
  63. entryVadf25.place(x=400,y=125,width=50,height=25)

  64. entryVadf30=tkinter.Entry(tk,text ="")
  65. entryVadf30.place(x=400,y=155,width=50,height=25)

  66. entryVadf40=tkinter.Entry(tk,text ="")
  67. entryVadf40.place(x=400,y=185,width=50,height=25)

  68. #添加按钮
  69. btn=tkinter.Button(tk,text="计算结果",font = 'Helvetica -80 bold')
  70. #(font = 'Helvetica -350 bold')用来控制字体大小
  71. btn.place(x=10,y=65,width=380,height=145)
复制代码


微信截图_20180106234912.png

请教各位大神
1、有没有什么方法能使代码行数减少
2、要怎么实现按下按钮后各个方框里面输入的数字执行计算
最佳答案
2018-1-7 09:11:11
本帖最后由 坏小子 于 2018-1-21 23:36 编辑

所用python版本:2.7.10


这是减少代码行数的方法,把常用的相似的语句封装成函数,这个还能再进一步封装


  1. def addLabelOnX(wg,x,text):
  2.     labelMad = tkinter.Label(wg,text=text)
  3.     labelMad.place(x=x,y=10,width=50,height=25)

  4. addLabelOnX(wg,10,'Mad')
  5. addLabelOnX(wg,65,'Aad')
  6. addLabelOnX(wg,120,'Vad')
  7. ...
复制代码






至于按钮的用法,可参考下面这个程序
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals,division
  3. from Tkinter import *
  4. def calculate(*args):
  5.     try:
  6.         value = float(feet.get())
  7.         meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
  8.     except ValueError:
  9.         meters.set('')
  10.         
  11. root = Tk()
  12. root.title("Feet to Meters")
  13. mainframe = Frame(root)
  14. mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
  15. mainframe.columnconfigure(0, weight=1)
  16. mainframe.rowconfigure(0, weight=1)
  17. feet = StringVar()
  18. meters = StringVar()
  19. feet_entry = Entry(mainframe, width=7, textvariable=feet)
  20. feet_entry.grid(column=2, row=1, sticky=(W, E))
  21. Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))
  22. Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)
  23. Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
  24. Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
  25. Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)
  26. for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
  27. feet_entry.focus()
  28. root.bind('<Return>', calculate)
  29. root.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-7 09:11:11 | 显示全部楼层    本楼为最佳答案   
本帖最后由 坏小子 于 2018-1-21 23:36 编辑

所用python版本:2.7.10


这是减少代码行数的方法,把常用的相似的语句封装成函数,这个还能再进一步封装


  1. def addLabelOnX(wg,x,text):
  2.     labelMad = tkinter.Label(wg,text=text)
  3.     labelMad.place(x=x,y=10,width=50,height=25)

  4. addLabelOnX(wg,10,'Mad')
  5. addLabelOnX(wg,65,'Aad')
  6. addLabelOnX(wg,120,'Vad')
  7. ...
复制代码






至于按钮的用法,可参考下面这个程序
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals,division
  3. from Tkinter import *
  4. def calculate(*args):
  5.     try:
  6.         value = float(feet.get())
  7.         meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
  8.     except ValueError:
  9.         meters.set('')
  10.         
  11. root = Tk()
  12. root.title("Feet to Meters")
  13. mainframe = Frame(root)
  14. mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
  15. mainframe.columnconfigure(0, weight=1)
  16. mainframe.rowconfigure(0, weight=1)
  17. feet = StringVar()
  18. meters = StringVar()
  19. feet_entry = Entry(mainframe, width=7, textvariable=feet)
  20. feet_entry.grid(column=2, row=1, sticky=(W, E))
  21. Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))
  22. Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)
  23. Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
  24. Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
  25. Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)
  26. for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
  27. feet_entry.focus()
  28. root.bind('<Return>', calculate)
  29. root.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-9 09:49:18 | 显示全部楼层
坏小子 发表于 2018-1-7 09:11
所用python版本:2.7.10

按照你的方法减少代码函数操作,会报错:
Traceback (most recent call last):
  File "C:\Documents and Settings\Administrator\桌面\1234.py", line 15, in <module>
    addlabel0nX(wg,10,"Mad")
NameError: name 'wg' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-21 23:38:50 | 显示全部楼层
sahinzheng 发表于 2018-1-9 09:49
按照你的方法减少代码函数操作,会报错:
Traceback (most recent call last):
  File "C:\Documents a ...

我只是举个例子,代码也只是部分关键代码。。。例子里的变量命名是按照我的习惯来的,要放在你的代码里用的话只需要在前面加上一句
wg=tk
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-29 15:37:49 | 显示全部楼层
坏小子 发表于 2018-1-21 23:38
我只是举个例子,代码也只是部分关键代码。。。例子里的变量命名是按照我的习惯来的,要放在你的代码里用 ...

谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 14:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表