一个类似于转盘的小程序,按下开始键,界面上的格子就会一个接一个的变颜色,按下结束键便会暂停
#导入模块
import tkinter
import threading
import time
class zhuang:
#初始化方法
def __init__(self):
# 定义一个变量,用于判断是否按下开始的标志
self.isloop = False
# 定义一个变量,用于判断是否按下结束的标志
self.condition = True
# 定义一个变量,用于记录停止时的位置
self.id = 0
# 创建主界面
self.root = tkinter.Tk()
self.root.minsize(400, 400)
self.root.title('大转盘')
self.buju()
# 加入消息循环
self.root.mainloop()
# 页面布局
def buju(self):
btn1 = tkinter.Label(text='苹果', bg='red', font=('黑体', 12))
btn1.place(x=30, y=20, width=60, height=50)
btn2 = tkinter.Label(text='香蕉', bg='white', font=('黑体', 12))
btn2.place(x=120, y=20, width=60, height=50)
btn3 = tkinter.Label(text='香梨', bg='white', font=('黑体', 12))
btn3.place(x=210, y=20, width=60, height=50)
btn4 = tkinter.Label(text='葡萄', bg='white', font=('黑体', 12))
btn4.place(x=300, y=20, width=60, height=50)
btn5 = tkinter.Label(text='龙眼', bg='white', font=('黑体', 12))
btn5.place(x=300, y=100, width=60, height=50)
btn6 = tkinter.Label(text='甘蔗', bg='white', font=('黑体', 12))
btn6.place(x=300, y=180, width=60, height=50)
btn7 = tkinter.Label(text='橘子', bg='white', font=('黑体', 12))
btn7.place(x=300, y=260, width=60, height=50)
btn8 = tkinter.Label(text='凤梨', bg='white', font=('黑体', 12))
btn8.place(x=210, y=260, width=60, height=50)
btn9 = tkinter.Label(text='榴莲', bg='white', font=('黑体', 12))
btn9.place(x=120, y=260, width=60, height=50)
btn10 = tkinter.Label(text='地瓜', bg='white', font=('黑体', 12))
btn10.place(x=30, y=260, width=60, height=50)
btn11 = tkinter.Label(text='柚子', bg='white', font=('黑体', 12))
btn11.place(x=30, y=180, width=60, height=50)
btn12 = tkinter.Label(text='橙子', bg='white', font=('黑体', 12))
btn12.place(x=30, y=100, width=60, height=50)
btnstart = tkinter.Button(text='开始', bg='#D1EEEE', font=('黑体', 12), command=self.newtask)
btnstart.place(x=120, y=140, width=60, height=50)
btnend = tkinter.Button(text='结束', bg='#D1EEEE', font=('黑体', 12), command=self.endtask)
btnend.place(x=210, y=140, width=60, height=50)
# 把所有按键装在一个列表中
self.roundlist = [btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11, btn12]
# 转动的方法
def round1(self):
# 如果id 等于列表的长度
if self.id == len(self.roundlist):
# id的值要给i 作为索引,所以需要减一
self.id -= 1
# 如果上一次按过了开始键
if self.isloop == True:
return
# 把储存的id 的值给i作为索引
i = self.id
while self.condition == True:
# 每次循环程序睡眠0.2秒
time.sleep(0.2)
# 将所有标签变为白色
for x in self.roundlist:
# 将所有的按键颜色变为白色
x['bg'] = 'white'
# 把此时的标签变为红色
self.roundlist[i]['bg'] = '#9932CC'
# 变量
i += 1
self.id = i
if i >= len(self.roundlist):
i = 0
#开启一个线程
def newtask(self):
# 建立一个新的线程
self.condition = True
t = threading.Thread(target=self.round1)
# 开启线程运行
t.start()
# 将按下的开始的标志改变为已按
self.isloop = True
# 按下结束的函数
def endtask(self):
# 将开始的标志改变为已按
self.condition = False
# 将按下开始标志改变为关闭
self.isloop = False
#实例化对象
ss = zhuang()
Python学习交流、资源共享群:563626388 QQ