Simple name-drawer using Python and Tkinter
from random import *
from Tkinter import *



Wildcard imports are against PEP 8.  I realize that from Tkinter import * is the usual form expressed in the documentation, but it is still not recommended by PEP 8.

I see s7, s8, and m10 used in many places.  I know what they are only because I can see what the texts of your buttons are.  Ideally, every line of code should be clear without any context.  I would use names that are more clear.  Also, self.m is not a very descriptive name.  I would suggest that you use a better one, but I see that it isn't used anywhere except its definition.  Therefore, it should be taken out completely.

Your equals signs are a little strange.  I give you two rules from PEP 8:


  Always surround these binary operators with a single space on either side: assignment (=), augmented assignment (+=,-= etc), comparisons (==,&lt;,&gt;,!=,&lt;&gt;,&lt;=,&gt;=,in,not in,is,is not), Booleans (and,or,not).


and


  Don't use spaces around the = sign when used to indicate a keyword argument or a default parameter value.


You seem to have those two rules switched up.  You have, for example, self.count_s7=0, but self.b1 = Button(..., text = ...).  Mind you, I mention = specifically, but you also break the rule with +=.

Your capitalization is a little messed up.  From PEP 8 on Method Names and Instance Variables:


  Use the function naming rules: lowercase with words separated by underscores as necessary to improve readability.


You break that rule with self.Results and self.Quit.

get_names doesn't seem to be a fitting name.  It doesn't return anything; it sets the text of self.Results.  Perhaps set_names would be more appropriate?

I don't like that you define the class names within the methods.  What you could do, actually, is make your __init__ method take a dictionary as an argument with the class names for keys and the student names for values.  Then, for each key-value pair, define a button and a random color and give command as just a single method.  It's fairly hard to explain without code, so I'll give an example:

def __init__(self, master, students):
    ...
    i = 2
    for class_name, student_names in students.iteritems():
        students[class_name] = [student_names, 0]
        button = Button(self.frame,
            text='Get Random Name: {}'.format(class_name), width=50,
            command=lambda name=class_name: self.draw_from_class(name),
            bg='#' + hex(randint(16777215))[2:] # 16777215 is FFFFFF
        )
        button.grid(row=i, column=1)
        i += 1

def draw_from_class(self, name):
    class_info = self.students[name]
    self.draw_names(*class_info)


You could then do:

app = App(root, {
    'Science 7': ['Name1', 'Name2', ...],
    'Science 8': ['Kid1', 'Kid2', ...],
    'Math 10': ['Student1', 'Student2', ...],
})


That way, it is very easy to add more classes.

It is generally a good idea to use if __name__ == '__main__' for your module-level code if you don't want it to run when this file is imported.