读到这篇文章[python 3.3下结合tkinter做的猜数字程序]的时候,就复制了代码,在自己机器上面跑了一下
源程序存在一个缺陷:
即当用户答对了以后,用户再点击'猜'按钮,最上面的提示标签还会变化
而实际情况应该是:用户答对了以后,'猜'按钮不随用户点击而使得提示标签发生变化。
以下是我对程序做的一些改进...
运行效果:
当用户猜对了以后:
修改后的代码:
1 # -*- coding: utf-8 -*-
2 import tkinter as tk
3 import sys
4 import random
5 import re
6
7 number = random.randint(0,1024)
8 running = True
9 num = 0
10 nmaxn = 1024
11 nminn = 0
12
13 def eBtnClose(event):
14 root.destroy()
15
16 def eBtnGuess(event):
17 global nmaxn
18 global nminn
19 global num
20 global running
21 #修改缺陷:用户答对了,提示标签还提示信息 Edit by Hongten 2013-09-09
22 #即用户在答对了以后,提示标签不应该再随着用户点击'猜'按钮而变化
23 if running:
24 val_a = int(entry_a.get())
25 if val_a == number:
26 labelqval("恭喜答对了!")
27 num+=1
28 running = False
29 numGuess()
30 elif val_a < number:
31 if val_a > nminn:
32 nminn = val_a
33 num+=1
34 label_tip_min.config(label_tip_min,text=nminn)
35 labelqval("小了哦")
36 else:
37 if val_a < nmaxn:
38 nmaxn = val_a
39 num+=1
40 label_tip_max.config(label_tip_max,text=nmaxn)
41 labelqval("大了哦")
42 else:
43 labelqval('你已经答对啦...')
44
45 def numGuess():
46 if num == 1:
47 labelqval('我靠!一次答对!')
48 elif num < 10:
49 labelqval('= =十次以内就答对了牛逼。。。尝试次数:'+str(num))
50 elif num < 50:
51 labelqval('还行哦尝试次数:'+str(num))
52 else:
53 labelqval('好吧。。。。。您都试了超过50次了。。。。尝试次数:'+str(num))
54
55 def labelqval(vText):
56 label_val_q.config(label_val_q,text=vText)
57
58 root = tk.Tk(className="比大小游戏")
59 root.geometry("400x90+200+200")
60
61 line_a_tip = tk.Frame(root)
62 label_tip_max = tk.Label(line_a_tip,text=nmaxn)
63 label_tip_min = tk.Label(line_a_tip,text=nminn)
64 label_tip_max.pack(side = "top",fill = "x")
65 label_tip_min.pack(side = "bottom",fill = "x")
66 line_a_tip.pack(side = "left",fill = "y")
67
68 line_question = tk.Frame(root)
69 label_val_q = tk.Label(line_question,width="80")
70 label_val_q.pack(side = "left")
71 line_question.pack(side = "top",fill = "x")
72
73 line_input = tk.Frame(root)
74 entry_a = tk.Entry(line_input,width="40")
75 btnGuess = tk.Button(line_input,text="猜")
76 entry_a.pack(side = "left")
77 entry_a.bind('<Return>',eBtnGuess)
78 btnGuess.bind('<Button-1>',eBtnGuess)
79 btnGuess.pack(side = "left")
80 line_input.pack(side = "top",fill = "x")
81
82
83 line_btn = tk.Frame(root)
84 btnClose = tk.Button(line_btn,text="关闭")
85 btnClose.bind('<Button-1>',eBtnClose)
86 btnClose.pack(side="left")
87 line_btn.pack(side = "top")
88
89 labelqval("请输入0到1024之间任意整数:")
90 entry_a.focus_set()
91
92 print(number)
93 root.mainloop()