tkinter导入
导入 tkinter 会自动导入 tkinter.constants ,所以,要使用 Tkinter 通常你只需要一条简单的 import 语句:import tkinter或者from tkinter import *
滚动文字控件:tkinter.scrolledtext
tkinter.scrolledtext 模块提供一个同名的类,实现了一个带有垂直滚动条的文字控件。使用 ScrolledText 类会比直接配置一个文本控件和滚动条简单。它的构造函数与 tkinter.Text 类相同。
如果需要更具体的控制,可以使用以下属性:ScrolledText.frame
围绕文本和滚动条控件的框架。ScrolledText.vbar
滚动条控件。
'''
sys.version_info[0]返回Python的版本号的第一个数字。
在 Python2 和 Python3 中,Tkinter 都在标准库中,无需安装即可使用。
在 Python2 中,这个库叫 Tkinter ,在 Python3 中,这个库叫 tkinter ,首字母大小写不相同,在导包时需要注意
'''
import sys#导入sys包
if sys.version_info[0] == 2:
import Tkinter
from Tkinter import *
else:
import tkinter as Tkinter
from tkinter import *
import random #导入Random模块,random()是不能直接访问的,需要导入random模块通过random静态调用该方法。
data = ['乔巴', '阿户子', '路飞', '索大', '女帝', '乌索普','山治','娜美','罗宾','布鲁克']
going = True #全局变量
is_run = False #全局变量
def lottery_roll(var1, var2):#屏幕滚动执行的动作
global going
##在函数内使用全局变量要进行声明,不声明则认为与全局变量同名不同值。
#用法1:可以让 方法内的 局部变量 全局可用,并且在别的文件里也可以引用到;
#用法2:在局部函数对全局变量重新赋值
show_member = random.choice(data)#随机选取字符串,即随机选取data中的元素
var1.set(show_member)
if going: #if True:表示条件为真,执行if包含的语句
window.after(50, lottery_roll, var1, var2)
#after表示定时刷新数据,间隔50ms,执行函数lottery_roll
else:
var2.set('恭喜 {} !!!'.format(show_member))#format()表示按位置格式化字符串
going = True
return
def lottery_start(var1, var2):#点击开始按钮执行的动作
global is_run
if is_run:
return
is_run = True
var2.set('幸运儿会是你吗???')
lottery_roll(var1, var2)#调用屏幕滚动的函数
def lottery_end():#点击结束按钮执行的动作
global going, is_run
if is_run:
going = False
is_run = False
#当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。
if __name__ == '__main__':
window = Tkinter.Tk()#实例化object,建立窗口window
window.geometry('405x320+250+15')#设定窗口的大小
window.title(' 滚 动 点 名 app')#给窗口起个名字
bg_label = Label(window, width=70, height=24, bg='#ECf5FF')#控件Label的参数:width宽度,height高度,bg背景颜色
bg_label.place(anchor=NW, x=0, y=0)#anchor控制Label文本的显示位置
var1 = StringVar(value='即 将 开 始')
show_label1 = Label(window, textvariable=var1, justify='left', anchor=CENTER, width=17, height=3, bg='#BFEFFF',
font='楷体 -40 bold', foreground='black')
#justify:指定多行的对齐方式,必须是 left, right, or center;anchor:指定文本(text)或图像(bitmap/image)在Label中的显示位置(方位)可用的值:
show_label1.place(anchor=NW, x=21, y=20)#x,y指定组件放置的绝对位置
# 在图形界面上设定标签。StringVar将label标签的内容设置为字符类型,用var来接收lottery_start函数的传出内容用以显示在标签上
var2 = StringVar(value='幸运儿是你吗???')
show_label2 = Label(window, textvariable=var2, justify='left', anchor=CENTER, width=38, height=3, bg='#ECf5FF',
font='楷体 -18 bold', foreground='red')
show_label2.place(anchor=NW, x=21, y=240)
button1 = Button(window, text='开始', command=lambda: lottery_start(var1, var2), width=14, height=2, bg='#A8A8A8',
font='宋体 -18 bold')#Button控件的text参数表示按钮上显示的文本,command表示指定其回调函数
button1.place(anchor=NW, x=20, y=175)
button2 = Button(window, text='结束', command=lambda: lottery_end(), width=14, height=2, bg='#A8A8A8',
font='宋体 -18 bold')
button2.place(anchor=NW, x=232, y=175)
window.mainloop()
# 注意,loop因为是循环的意思,window.mainloop就会让window不断的刷新,如果没有mainloop,就是一个静态的window,传入进去的值就不会有循环,mainloop就相当于一个很大的while循环,有个while,每点击一次就会更新一次,所以我们必须要有循环
# 所有的窗口文件都必须有类似的mainloop函数,mainloop是窗口文件的关键的关键
由于tkinter一旦开始执行进入mainloop,就相当于进入一个界面死循环状态,出不来;如果想做定时刷新tkinter界面的控件数据,必须调用tkinter.TK()自带的after函数,这个函数可以设定定时执行某个任务的时间。实现一个刷新数据函数调用tkinter.TK()自带的after函数,在调用mainloop函数之前,将这个刷新数据函数调用,则可以实现定时刷新数据功能
本文介绍了如何在Python3中使用Tkinter库创建一个具有滚动功能的抽奖器界面。通过导入tkinter模块,利用ScrolledText类创建带有滚动条的文本控件,并详细说明了ScrolledText类的属性。为了实现界面的定时刷新,文章提到可以借助Tkinter的after函数来设置定时执行任务,从而更新界面数据。
2563

被折叠的 条评论
为什么被折叠?



