is
cheap
import
threading
class
TestThread(threading.Thread):
def
__init__(self,
thread_num=0,
timeout=1.0):
super(TestThread,
self).__init__()
self.thread_num
=
thread_num
self.stopped
=
False
self.timeout
=
timeout
def
run(self):
def
target_func():
inp
=
raw_input("Thread
%d:
"
%
self.thread_num)
print('Thread
%s
input
%s'
%
(self.thread_num,
inp))
subthread
=
threading.Thread(target=target_func,
args=())
subthread.setDaemon(True)
subthread.start()
while
not
self.stopped:
subthread.join(self.timeout)
print('Thread
stopped')
def
stop(self):
self.stopped
=
True
def
isStopped(self):
return
self.stopped
thread
=
TestThread()
thread.start()
import
time
print('Main
thread
Wainting')
time.sleep(2)
thread.stop()
thread.join()
Python编程类的概念可以比喻来形容一些类型,如“人类”的集合,可以看作是一个类,然后使用这个类来定义人类出每一个具体的人 - 你,我,他等,它的对象。类也有属性和函数,属性部分的类本身,因为人类有名称,属性,如身高和体重,以及特定值的功能都依赖于每个人??功能可以实现为一个类的行为,作为人类吃饭,走路和睡眠功能类的定义一般是:
类的类名[(父类名)]:[成员函数和成员变量],
类命名的类的名称,并要求可选的父类,但父类,子类的名称的定义,您有适当的属性和父类的方法。当作为一个对象类定义中使用时,会首先调用的__init__构造函数来初始化每个属性的对象,每个属性类(成员变量),可以在构造函数中定义的,当你添加一个对象指针的定义就是喜欢。当对象被销毁,析构函数被调用的__del__,类定义的成员函数,则默认值必须是一个变量(在这个指针类似于C + +)代表对象本身的类定义,的变量名可以定义一般用自变量表示大致相同
基类和父的意思。
父类被称为具有超强的关键字,其实并不存在,如果当前类的方法或变量,按照继承链一直是背靠背,直到对象类。
被实例化,以创建该类的对象。
如何在tkinter窗体上动态创建组件以及销毁组件的方法。
import tkinter
import tkinter.messagebox
import tkinter.simpledialog
btnList = []
# 动态创建组件,并计算组件在窗体上的位置
def place(n):
for i in range(n):
exec('btn'+str(i)+'=tkinter.Button(root,text='+str(i)+')')
eval('btn'+str(i)).place(x=80, y=10+i*30, width=60, height=20)
btnList.append(eval('btn'+str(i)))
root.geometry('200x'+str((n)*30+70)+'+400+300')
return n*30 + 10
# 创建tkinter应用程序
root = tkinter.Tk()
# 窗口标题
root.title('动态创建组件')
# 窗口初始大小和位置
root.geometry('200x180+400+300')
# 不允许改变窗口大小
root.resizable(False, False)
# 增加按钮的按钮
def btnSetClick():
n = tkinter.simpledialog.askinteger(title='输入一个整数',
prompt='想动态增加几个按钮:',
initialvalue=3)
if n and n>0:
startY = place(n)
modify(startY)
# 根据需要禁用和启用“增加按钮”和“清空按钮”
btnSet['state'] = 'disabled'
btnClear['state'] = 'normal'
btnSet = tkinter.Button(root,
text='增加按钮',
command=btnSetClick)
def btnClearClick():
global btnList
# 删除动态创建的按钮
for btn in btnList:
btn.destroy()
btnList = []
modify(20)
btnClear['state'] = 'disabled'
btnSet['state'] = 'normal'
btnClear = tkinter.Button(root,
text='清空按钮',
command=btnClearClick)
# 默认处于禁用状态
btnClear['state'] = 'disabled'
# 动态调整“增加按钮”和“清空按钮”的位置
def modify(startY):
btnSet.place(x=10, y=startY, width=80, height=20)
btnClear.place(x=100, y=startY, width=80, height=20)
modify(20)
root.mainloop()
代码运行后初始状态为:单击“增加按钮”后,在弹出的窗口中输入5,然后窗体变为下面的样子:
单击“清空按钮“后恢复到初始状态。