上次用tkinter写的“猜数字”代码,改进一下,使用Notebook。
# 导入模块
import tkinter as tk
from tkinter import ttk
from random import randint
# 定义确定按钮的点击事件
def hit(x,y):
global s_Lab
print(x.get(),y)
try:
n=int(x.get())
if n>y:s="猜大了"
if n==y:
s="%d,你猜对了"%y
if n<y:s="猜小了"
# if y == 0: s = "默认值为0,先设置"
s_Lab.set(s)
x.set('')
except:
s_Lab.set("输入必须是数字")
x.set('')
# 定义按钮的事件
def key_re(evt):
hit(num_E,n_rand)
# 定义随机数设置
def ran_set():
global n_rand
try:
s, n = s_n.get(), e_n.get()
n_rand=randint(s,n)
print(n_rand)
a_lbv.set("已设置好一个%d-%d范围内的随机数"%(s,n))
s_Lab.set("猜一个%d-%d范围内的随机数"%(s,n))
except:
a_lbv.set("请正确设置")
# 创建窗口对象
root = tk.Tk()
# 窗口标题
root.title("猜大小")
# 设置窗口大小及位置
root.geometry("300x160+500+200")
root.resizable(0,0) # 禁止改变窗口大小
# 设置一个notebook容器控件
note = ttk.Notebook(root)
note.pack(fill="both", expand=True)
n_rand=randint(0,100) #定义初始随机数
# 定义frm2
frm1 = tk.Frame(note)
ss="猜一个整数(默认0-100之间)"
# Label是第1个控件,从左向右布局
s_Lab=tk.StringVar() #定义动态字符串
s_Lab.set(ss)
s=tk.Label(frm1, bg='red', fg='yellow',width=25,textvariable=s_Lab)
s.pack(side="left",padx=5, pady=5,fill="both")
# 3个Button自上而下布局
num_E=tk.StringVar() #定义动态字符串
e=tk.Entry(frm1, width=10,textvariable=num_E)
e.pack(padx=5, pady=30)
e.focus_set() # 设置焦点
r_btn=tk.Button(frm1, text='确定', width=10,command=lambda:hit(num_E,n_rand))
r_btn.pack(padx=5)
root.bind('<Return>', key_re) # 绑定回车键
frm1.pack(fill="both", expand=True)
note.add(frm1, text="猜数字") # 将frm1加入到note容器
# 定义frm2
frm2 = tk.Frame(note,padx=20,pady=20)
a_lbv=tk.StringVar()
a_lbv.set("设置起始与结束值,初始随机数为0-100")
a_lb=tk.Label(frm2,textvariable=a_lbv).pack(pady=10)
s_n=tk.IntVar()
s_E1=tk.Entry(frm2,width=10,textvariable=s_n).pack(side='left',padx=10,pady=5)
z_lb=tk.Label(frm2,text="至").pack(side='left',pady=5)
e_n=tk.IntVar()
e_n.set(100)
e_E2=tk.Entry(frm2,width=10,textvariable=e_n)
e_E2.pack(side='left',padx=10,pady=5)
set_btn=tk.Button(frm2,width=10,text="设置",command=ran_set)
set_btn.pack(side='right',padx=10,pady=5)
frm2.pack(ipadx=50,ipady=20)
note.add(frm2, text="设置") # 将frm2加入到note容器
# 进入消息循环
root.mainloop()