Randomly generate a Hex Colour code and its contrasting colour using Python
Review


Globals should be ALL_CAPS


start



=> START
Accumulation: Loop variables that are not explicitly used within the loop block should be replaced by _ , as is standard Python style. 


for i in range(6):



You don't use the i later on, so the convention is to use _ for a dummy variable.

=> for _ in range(6)
The name of the variable value_dict implies it's a dict (Python's built-in dictionary type) but it's implemented as a list.


value_dict = [['A','10'],['B','11'],['C','12'],['D','13'],['E','14'],['F','15']]
...
for thing in value_dict:
    if x == thing[1]:
        x = thing[0]



You could change this to use an actual dict like this:

val_dict = {'10' : 'A', '11' : 'B', '12' : 'C', '13' : 'D', '14' : 'E', '15' : 'F'}
...

if x in val_dict:
    x = val_dict[x]

Or better yet why not immediately convert to an hexadecimal using hex?
Check your naming. Don't be overly generic.

values #
thing  # Each of these could literally be anything
x      #

colour = colour + x
can be rewritten as colour += x
Use spaces around the comma: a,b => a, b
Use a if __name__ == '__main__' guard




Essentially your startcolour() can be rewritten as a one-liner

from random import randint
_HEX = list('0123456789ABCDEF')
...
def startcolour():
    return '#' + ''.join(_HEX[randint(0, len(_HEX)-1)] for _ in range(6))